一道java面试题,算法!

python1981 2007-11-20 03:27:37
1-100中,
求:5个不同数的和小于100的不重复组合的个数.
求效率比较高的算法。

用for循环写,是个人都会,这样效率太差了, 排除.


先谢谢大家了!
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxfei 2007-12-05
  • 打赏
  • 举报
回复

import java.util.Hashtable;


public class ByteArrayTest {

public static void main(String[] args) throws Exception{
int all=0,satisfied=0;
Hashtable buffer=new Hashtable();
for(int v1=0; v1<100;v1++){
for(int v2=(100-v1);v2>=0 && v2<=v1;v2--){
for(int v3=(100-v1-v2);v3>=0 && v3<=v2;v3--){
for(int v4=(100-v1-v2-v3);v4>=0 && v4<=v3;v4--){
for(int v5=(100-v1-v2-v3-v4);v5>=0 && v5<=v4;v5--){
if (v1+v2+v3+v4+v5<100){
satisfied++;
String key=v1+","+v2+","+v3+","+v4+","+v5;
buffer.put(key,key);
}
all++;
}
}
}
}
}
System.out.println("全部循环:"+all+", 满足条件的:"+satisfied+", 排重后:"+buffer.keySet().size());
}
}




全部循环:14447, 满足条件的:7168, 排重后:7168
hmilyld 2007-12-05
  • 打赏
  • 举报
回复
GG了下,找到下面这个解法,但是还是要用到循环,
偶没看明白什么意思,每次循环的判断哪里为什么会是那4个数值?达人解释下.
package com.hmilyld.exp;

public class NumExp {

/**
* @param args
*/
public static void main(String[] args) {
int total = 0;
int num = 0;
/**
* 第一个数取到17
*/
for (int i = 1; i < 18; i++) {
/**
* 第二个数取到23
*/
for (int j = i + 1; j < 24; j++) {
/**
* 第三个数取到31
*/
for (int k = j + 1; k < 32; k++) {
/**
* 第四个数取到46
*/
for (int l = k + 1; l < 47; l++) {
int m = 99 - i - j - k - l;
if (m > l) {
num++;
total = total + (m - l);
}
}
}
}
}
System.out.println("总数:"+total);
System.out.println("循环次数:"+num);
}

}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧