算出差值最小的两个乘数 C#
3=1*3
6=2*3
8=2*4
12=3*4
15=3*5
18=3*6
24=4*6
通过一个数算出后面两个值
static Tuple<int, int> GetNeedData(int source)
{
if (source <= 0)
return new Tuple<int, int>(0,0);
int x = 1, y = source;
int t1 = x, t2 = y;
for (; x <= y; x++){
if (source % x == 0)
{
y = source / x;
if(x <= y)
{
t1 = x;
t2 = y;
Console.WriteLine($"x:{x},y:{y}");
}
}
}
Console.WriteLine($"need-data->x:{t1},y:{t2}");
return new Tuple<int, int>(t1, t2);
}
谢谢
一个循环就够.找出x比y小的最大数.一个循环就可以
只通过一个数,算出两个乘数来,可以求过程吗。我自己卡在一个地方了
是先用3 算出最大的3的倍值,然后就求不出来了
@疯五五爱喝咖啡: 你不会找一个数的约数吗.从2开始求余数.余数为0了就能被整除.
然后再除以整除的数就能得到2个乘数.话说这种是初中数学题吧
你要是连这种水平的数学题都不会做.我还能说什么..
@吴瑞祥: 嗯,确实水平较低,谢谢指导
static void Main(string[] args) { Console.WriteLine("输入一个数字"); int number = Convert.ToInt32(Console.ReadLine()); int j; List<int> a = new List<int>(); for (int i = 1; i < number; i++) { if (number % i == 0) { j = number / i; a.Add(Math.Abs(j - i)); } } int minnumber = a.Min(); //这个是差值 double number1 = 0; //第一个乘数 double number2 = 0; //第二个乘数 double dt = minnumber * minnumber + 4 * number; if (dt < 0) { Console.WriteLine("无解"); } else if (dt == 0) { number1 = Math.Abs(-minnumber / 2 * number); Console.WriteLine("两个乘数为{0}和{1}", number1, number1); } else { number1 = Math.Abs((-minnumber + Math.Sqrt(dt)) / 2 ); number2 = Math.Abs((-minnumber - Math.Sqrt(dt)) / 2 ); Console.WriteLine("两个乘数为{0}和{1}", number1, number2); } Console.ReadKey(); }
已经用了第二位同学的代码了,老板催得急, 没有办法自己想了,还是非常感谢。会看你的代码的
性能有所差别,测试一个无解的,可以没有截图
无解
这好像是一个公式,我忘记叫什么了。666 ,你是刚毕业的吧,还是还在读书
@kingreatwill: 一元二次求根,刚毕业,他的方法比我好,