日期:2014-05-20  浏览次数:20591 次

一道笔试题
有1-100的100个自然数,把他们放入a[99]中,用JAVA编写一段代码,找出哪个数没被放进去?

------解决方案--------------------
计算出a[99]中所有数字的和A,然后 5050 - A就是那个没放进去的数字
------解决方案--------------------
楼上的方法很好,在放入数组时就顺便求和。
------解决方案--------------------
我把上面的哥们的实现下。
public int findIt(int a[99]){
int sum = 0;
for(int i=0;i <99;i++){
sum += i;
}

return 5050 - sum;
}
也许还有其他算法:)
------解决方案--------------------
你怎么就知道1-100的和就是5050 ? 我稍为改一下需求的话比如100改500,上面说的方法就不适用了,事实上这是编程的大忌! 如果你是一个好的程序员,至少在上面的基础上修改一下, 忘记5050这个数字,你会怎么做?
------解决方案--------------------
LS:)

public int findIt(int a[]){
int result = 0;
for(int i=0;i <a.length;i++){
result += (i-a[i]);
}

return result + a.length + 1;
}
------解决方案--------------------
up
------解决方案--------------------
public int findIt(int[] a){
int sum = 0;
int sumA = 0;
for(int i=0;i <101;i++){
sum += i+1;
if (i <100) {
sumA += a[i];
}
}
return sum - sumA;
}
------解决方案--------------------
二樓的方向可行,但未必可靠
如果是兩個數沒有放進去呢?
------解决方案--------------------
如果是多个数没放进去,怎么知道是哪些数没进去?
------解决方案--------------------
思路都够开阔.
------解决方案--------------------
把它输出不就知道那个没放进去了吗?
------解决方案--------------------
楼上如果有10w个数的时候你自己看着办吧。

如果只是1个数字的话二楼的方法是可以,不过对于如果不是100其他的话可以改称sum=n*(n+1)/2。然后sum-A
如果是n个数字不在,可以考虑先把a[]按由大到小排序,设置一个m=1和f[n]然后遍历a查找。
public static int[] findInts(int[] a, int n) {
int len = a.length;
if (n - len <= 0) return null;
int[] f = new int[n - len];
a = sort(a);

int temp = 1;
for (int i = 0; i < len; i++) {
if(a[i] != i+temp){
f[temp-1] = i + 1;
temp++;
}
}
return f;
}
------解决方案--------------------
学习~
------解决方案--------------------
在排好序的情况下,不知如下是否可行,望各位大哥多给意见
public int findInt(int a[]) {
int c=-1;
for(int i=1;i <a.length+1;i++) {
if(i!=a[i]) {
c=i;
i=(a.length+1)
}
}
if(c=-1) {
c=(a.length+1);
}
return c;
}
------解决方案--------------------
为什么没人用递归方法呢.是不好吗?
------解决方案--------------------
放到一个类里面,怎么运行不了呢?>
------解决方案--------------------
Mark
------解决方案--------------------
递归效率不行