1/?+1/?+1/?=3/7。(三个问号处填入不同自然数)程序计算 RT,我的想法是定义三个变量,在一个无限循环里让三个变量自增,当什么时候变量值满足表达式时,循环退出,但是感觉有点问题,因为自增的时候这三个数字是同时增加的,例如初始化x=0,y=0,z=0,循环中x++,y++,z++,那么这三个数值会一样变化,这样就不能算出来这三个变量的值了,望有人能指点一下,谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【swloveqq】截止到2008-07-22 11:10:59的历史汇总数据(不包括此帖):发帖的总数量:4 发帖的总分数:170 每贴平均分数:42 回帖的总数量:12 得分贴总数量:0 回帖的得分率:0% 结贴的总数量:4 结贴的总分数:170 无满意结贴数:0 无满意结贴分:0 未结的帖子数:0 未结的总分数:0 结贴的百分比:100.00% 结分的百分比:100.00% 无满意结贴率:0.00 % 无满意结分率:0.00 % 敬礼! 首先你这个问题涉及到分数运算,所以如果想得到精确的值,就不能使用除法,而应该使用如下的形式:(ab+bc+ac)/abc=3/7即7(ab+bc+ac)=3abc好了,现在可以开始遍历了,不过因为你做的是无限循环,万一这个题目没有解,程序无法终止,所以应该设定一个遍历范围,比如a<100000之类。遍历方法是:for(long a=3;a<=100000;a++){ for(long b=a;b<=100000;b++){ for(long c=b;c<=100000;c++){ if(7*(a*b+b*c+a*c)==3*a*b*c){ System.out.println(a,b,c); } } }} int x = 1;int y = 1;int z = 1;while(true){ if(((1/x)+(1/y)+(1/z))*7==3) break; x++; y++; z++;}不知道楼主是不是这个意思? 用三个for循环嵌套肯定是可以得到结果的,不过应该是最笨的方法.3/7=1/7+1/7+1/7不妨设a<b<c,b=7,那么就可以只用两重循环得到了.而且a循环只需要2~6 修改为:for(long a=3;a <=6;a++){ for(long b=a+1;b <=100000;b++){ for(long c=b+1;c <=100000;c++){ if(7*(a*b+b*c+a*c)==3*a*b*c){ System.out.println(a,b,c); } } } } public class Tttt {public static void main(String[] args) { for(int a = 3; a <= 6; a++) { for(int b = a + 1; b < 14 * a /(3 * a - 7) ; b++) { for(int c = b + 1; c <= 7*a*b / (3*a*b - 7*a - 7*b); c++) { if(7*(a*b + a*c + b*c) == 3*a*b*c) { System.out.println("a:b:c " + a + ":" + b + ":" + c); } } } }}}运行结果:a:b:c 3:11:231a:b:c 3:12:84a:b:c 3:14:42a:b:c 3:15:35a:b:c 4:6:84a:b:c 4:7:28至于为什么这样做 吃饭回来再说 呵呵 设定 a<b<c那么 a可以的取值范围 为 3~7那么 b可以的 取值 范围可以 根据 a的值 定义到最小值和最大值 比如 a 取3 那么 剩下 3/7-1/3 给 1/b+1/c 所以b可以的 取值范围为 (3/7-1/3) >b>(3/7-1/3)/2依此 推!不知道我理解正确否.... 首先LZ的意思是3个不同的自然数那么我们就假设是a<b<c因为1/a + 1/b + 1/c = 3/7所以a必然小于7(至少有一个大于1/7)而1/2 > 3/7所以a>=3 a<7a确定了那么b的范围也确定了设m=3/7 - 1/a也就是1/b + 1/c = m因为b<c 所以1/b > 1/c2/b > mb< 2/m = 2/(3/7 - 1/a)整理得到b < 14 * a /(3 * a - 7)a b 都确定了 c的范围自然也就确定了(因为要给c设定上限 也就是c<= 某个数这些c都满足1/a + 1/b + 1/c >= 3/7)其实这里c已经没必要用循环判断了int c = (int)(7*a*b / (3*a*b - 7*a - 7*b));if(c > 0 && 7*(a*b + a*c + b*c) == 3*a*b*c) { System.out.println("a:b:c " + a + ":" + b + ":" + c);} 两次输入密码不一致问题 Jar 命令 java.io.IOException:invalid header field 请教:Statement executeUpdate(String sql) byte类型转化int的问题 谁有讲算法的代码和书?请帮忙顶 socket连接问题 FileWriter 写完文件,用System.exit(0);文件就被删除了 大家来发言:iPlanet的来龙去脉和用处,已经与同类软件的性能比较 :) 新手上路!急急急!!! java中模拟键盘,然后输入内容 Java中子类可以把父类中的公有方法覆盖声明为私有的吗 java怎么样连接一张Excel表??????
楼主【swloveqq】截止到2008-07-22 11:10:59的历史汇总数据(不包括此帖):
发帖的总数量:4 发帖的总分数:170 每贴平均分数:42
回帖的总数量:12 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:4 结贴的总分数:170
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
(ab+bc+ac)/abc=3/7
即
7(ab+bc+ac)=3abc
好了,现在可以开始遍历了,不过因为你做的是无限循环,万一这个题目没有解,程序无法终止,所以应该设定一个遍历范围,比如a<100000之类。
遍历方法是:
for(long a=3;a<=100000;a++){
for(long b=a;b<=100000;b++){
for(long c=b;c<=100000;c++){
if(7*(a*b+b*c+a*c)==3*a*b*c){
System.out.println(a,b,c);
}
}
}
}
int x = 1;
int y = 1;
int z = 1;
while(true){
if(((1/x)+(1/y)+(1/z))*7==3)
break;
x++;
y++;
z++;
}不知道楼主是不是这个意思?
for(long a=3;a <=6;a++){
for(long b=a+1;b <=100000;b++){
for(long c=b+1;c <=100000;c++){
if(7*(a*b+b*c+a*c)==3*a*b*c){
System.out.println(a,b,c);
}
}
}
}
for(int a = 3; a <= 6; a++) {
for(int b = a + 1; b < 14 * a /(3 * a - 7) ; b++) {
for(int c = b + 1; c <= 7*a*b / (3*a*b - 7*a - 7*b); c++) {
if(7*(a*b + a*c + b*c) == 3*a*b*c) {
System.out.println("a:b:c " + a + ":" + b + ":" + c);
}
}
}
}
}
}运行结果:
a:b:c 3:11:231
a:b:c 3:12:84
a:b:c 3:14:42
a:b:c 3:15:35
a:b:c 4:6:84
a:b:c 4:7:28
至于为什么这样做 吃饭回来再说 呵呵
那么我们就假设是a<b<c
因为1/a + 1/b + 1/c = 3/7
所以a必然小于7(至少有一个大于1/7)
而1/2 > 3/7
所以a>=3 a<7
a确定了
那么b的范围也确定了
设m=3/7 - 1/a
也就是
1/b + 1/c = m
因为b<c
所以1/b > 1/c
2/b > m
b< 2/m = 2/(3/7 - 1/a)
整理得到b < 14 * a /(3 * a - 7)
a b 都确定了 c的范围自然也就确定了
(因为要给c设定上限 也就是c<= 某个数
这些c都满足1/a + 1/b + 1/c >= 3/7)
其实这里c已经没必要用循环判断了
int c = (int)(7*a*b / (3*a*b - 7*a - 7*b));
if(c > 0 && 7*(a*b + a*c + b*c) == 3*a*b*c) {
System.out.println("a:b:c " + a + ":" + b + ":" + c);
}