算法高手请进
public class A
{
public static void main(String[] args)
{
int demo;
for (int i = 1; i < 50; i++)
for (int j = i + 1; j < 100; j++)
for (int k = j + 1; k < 100; k++)
for (int l = k + 1; l < 100; l++)
for (int m = l + 1; m < 100; m++)
if ((i + j + k + l + m) == 100)
System.out.println(i,j,k,l,m);
}
}
谁有更好的方法
或者可以将这个程序进行完整修改
希望你的电脑不会死机
[解决办法]
楼主原方法改写:
public static void main(String[] args) {
long start = System.currentTimeMillis();
int counter = 0;
int result = 0;
for (int i = 1; i < 50; i++) {
for (int j = i + 1; j < 100; j++) {
for (int k = j + 1; k < 100; k++) {
for (int l = k + 1; l < 100; l++) {
for (int m = l + 1; m < 100; m++) {
if ((i + j + k + l + m) == 100) {
System.out.println(i + " " + j + " " + k + " " + l + " " + m);
result++;
}
counter++;
}
}
}
}
}
long end = System.currentTimeMillis();
System.out.println( "得到 " + result + "个结果; 花费时间: " + (end - start) + "毫秒; 循环次数: " + counter);
}
输出:
得到25337个结果; 花费时间:1547毫秒; 循环次数:69404384
改进后的方法:
public static void main(String[] args) {
long start = System.currentTimeMillis();
int counter = 0;
int result = 0;
for (int i = 1; i < 50; i++) {
for (int j = i + 1; j < 100 && i + j <= 100; j++) {
for (int k = j + 1; k < 100 && i + j + k <= 100; k++) {
for (int l = k + 1; l < 100 && i + j + k + l <= 100; l++) {
for (int m = l + 1; m < 100 && i + j + k + l + m <= 100; m++) {
if ((i + j + k + l + m) == 100) {
System.out.println(i + " " + j + " " + k + " " + l + " " + m);
result++;
}
counter++;
}
}
}
}
}
long end = System.currentTimeMillis();
System.out.println( "得到 " + result + "个结果; 花费时间: " + (end - start) + "毫秒; 循环次数: " + counter);
}
输出:
得到25337个结果; 花费时间:641毫秒; 循环次数:480512
[解决办法]
回复人:YidingHe(机枪兵) ( 四级(中级)) 信誉:100 2007-02-26 01:06:41 得分:0
System.out.println(i + " " + j + " " + k + " " + l + " " + m);
这一句占用大量时间!去掉之后的输出为:
得到25337个结果; 花费时间:16毫秒; 循环次数:480512
没有输出结果啊
[解决办法]
mark!
[解决办法]
重新写了一下,现在得到最少的循环次数了:
http://yiding-he.javaeye.com/blog/55704
题目是:i,j,k,l,m 5个互不相等的话估计有问题
1,2,3,94/2,94/2 这个...
lz 的题目是什么?
[解决办法]
题目是什么?
[解决办法]
前面有帖子提过了啊.
忘了帖子名了,不过高人们是这样写的
for (int i = 1; i < 20; i++) {
后面忘了......
[解决办法]
题目是求1-100之间,五个不同数字之和为100的组合有那些(与顺序无关)
[解决办法]
改成
;i <=18;
;j <=23;
;k <=31;
;l <=46;
;m <=90;
[解决办法]
getPassion() ( )
题目是求1-100之间,五个不同数字之和为100的组合有那些(与顺序无关)
这个题目我也来做一个 ~ 不过输出结果多了点 这题出的不好
public class Test{
public static void main(String[] args){
int n = 0,count=0;
long start,stop;
start = System.currentTimeMillis();
for(int i=1;i <=20;i++){
for(int j=i+1;j <=40;j++){
for(int k=j+1;k <=60 && i+j+k <100;k++){
for(int g=k+1;g <=80 && i+j+k+g <100;g++){
for(int h=g+1;h <=100 && i+j+k+g+h <=100;h++){
if((i+j+k+g+h)==100){
System.out.println(i+ " "+j+ " "+k+ " "+g+ " "+h);
n++;
}
count++;
}
}
}
}
}
stop = System.currentTimeMillis();
System.out.println( "数量 "+n+ "\t时间 "+(stop-start)+ "循环次数 "+count);
}
}
输出:数量25337 时间2937 循环次数480512
循环次数统计有问题 实际次数应该比这多 但不会太离谱
[解决办法]
晕倒。。接分了