有三个文本框: textbox1 textbox2 textbox3 这三个文本框为用户输入的地方,注意可以输入任何数字,如整数,小数等。又有三个文本框 : textbox4 textbox5 textbox6 这三个文本框是表示电脑配对的数字。这三个数字满足条件 结果一: textbox1.text * textbox4.text - textbox5.text - textbox6.text>=0 结果二: textbox2.text * textbox5.text - textbox4.text - textbox6.text>=0
结果三:textbox3.text * textbox6.text - textbox5.text - textbox4.text>=0
条件:100<=textbox4.text + textbox5.text + textbox6.text<=100000 &&
(textbox4.text + textbox5.text + textbox6.text)%100==0 结果即都为正的(这是最好的情况)或者满足条件 上面的结果为两正一负,该怎样实现呢?
用for循环实现吗?
结果三:textbox3.text * textbox6.text - textbox5.text - textbox4.text>=0
条件:100<=textbox4.text + textbox5.text + textbox6.text<=100000 &&
(textbox4.text + textbox5.text + textbox6.text)%100==0 结果即都为正的(这是最好的情况)或者满足条件 上面的结果为两正一负,该怎样实现呢?
用for循环实现吗?
写个try
{
1:...
2:...
....
}
catch
{}
管他数据是否为空,为空的话肯定报错,也就肯定到catch里面
你应该用这种方法:有一个三元一次方程组,参数为TEXTBOX1~3,然后返回三个解即可。还是需要自己来解方程的
ax+by+cz>=2(x+y+z)
设 b=a+d, c=a+f ,那么可以转换为
dy+fz>=2/a 推出 z>=(2/a-dy)/f那么这个问题变得简单了,由于a,b,c可以提前知道, d,f这两个差值也就知道了,那么我们可以任意将Y指定一个值,就可以得到z的值 (这个值需要z>=(2/a-dy)/f 上取整)
y,z都确定的情况下,求X就简单了, 之需要满足和在100~10000之间,然后他们的和对100取模为0就OK了。
控件值可直接获取也可遍历
ax+by+cz>=2(x+y+z) //怎么得来的呢?设 b=a+d, c=a+f ,那么可以转换为 //f又是什么东东??能耽误你几分钟跟我细细讲讲吗?
仔细看我的假设, a,b,c 为1~3号textbox的输入, x,y,z为后三个要求的值,
ax-y-z>=0
by-x-z>=0
cz-x-y>=0
那么,ax-y-z+by-x-z+cz-x-y>=0, 那么推出 ax+by+cz>=2(x+y+z)
因为a,b,c都是已知的, b=a+d, c=a+f这个还不明白么? 比如输入 a=1, b=2, c=3 那么 b=a+1, c=a+2, 当然d,f肯定可能为负数,没有关系好了讲解就到这里。
推导了半天,也没有看明白,请问d,f这两个差值也就知道了,有什么用,你的推导公式中没有一个用到该插值的地方。比如x=(d-f)+a+b+c...之类的,也就是说,等式的右边应该都是确定的。
我认为好人就要做到底,最终给出
x=...
y=...
z=...
x+y+z(%100)=100
才是最终的结果。
或者等式的右边有一个循环次数已知的整型变量u,使得等式成立
x=...+u
y=...+u
z=...+u
x+y+z(%100)=100
希望zhengqian529指导
哈哈,其实我也就是按照我的思考推论一下,不一定正确,你应该完整的看我的回复,我在上面已经说过了。
大家集体来解决吧。 我来说明一下:
我在第一次发言的时候推导出:z>=(2/a-dy)/f (a,d,f肯定是可以得到的,具体精确到浮点数多少位看需求了),由此我推断关键的事情就在Y上面,所以程序可以给Y任意一个值, 然后通过这个公式得到Z,但是要符合z>=(2/a-dy)/f 。
得到Y,z以后就可以通过剩下的2个公式求X。
double a = 1;
double b = 2;
double c = 3;
double d = 1;
double f = 2; double x=0, y, z;
int ran;
Random r = new Random();
y=r.Next(100, 10000); z = (2 / a + d * y) / f; if (int.TryParse(z.ToString(),out ran))
{
for (int i = 0; i < 10000-y-ran; i++)
{
if ((i + y + z) % 100 == 0&&(i+y+z)<=10000&&(i+y+z)>=100)
x = i;
}
} Console.WriteLine("x:{0} Y:{1} Z:{2}",x,y,z);
恕学生愚昧,还是不懂大哥的意思,a,b,c表示用户输入的数字,x,y,z表示要求的数字,那么d,f是干什么用的,大哥说假设为什么要这样假设呢?这样假设有什么用呢?还有就是依照上面大哥的意思,x永远都是0的值其它的都能理解,还有就是上面double b = 2; double c = 3;都没有用上...........我的想法是用a,b,c的倒数来乘以a,b,c 使得 x=a的倒数, y=b的倒数, z=c的倒数,但是问题来了,如果按照我的思路来做的话那么那些条件很难够满足,即使满足了,但是也不好分配......谁能告诉我啊!!
代码如下:下面就不知道该怎样下手了:
float a = float.Parse("2.35"); //用户输入的数字一
float b = float.Parse("3.10"); //用户输入的数字二
float c = float.Parse("2.50"); //用户输入的数字三 float aa = float.Parse(Convert.ToDouble(1 / 2.35).ToString("f2")); //用户输入的数字一的倒数
float bb = float.Parse(Convert.ToDouble(1 / 3.10).ToString("f2")); //用户输入的数字二的倒数
float cc = float.Parse(Convert.ToDouble(1 / 2.50).ToString("f2")); //用户输入的数字三的倒数
满足不等式方程组的集合表示这些空间的交集
ax-y-z>=0
by-x-z>=0
cz-x-y>=0
x+y+z>=100
(a,b,c为已知的正有理数)
所以用脑袋想想,它们的空间不一定都在同一侧呀,即使在同一侧,也可能交集不在x+y+z<=100的空间呀
所以不是一定有解的