一个数组,随机抽取的两个数,请问是哪两个?

youzelin 2010-11-03 05:04:49
题目:有 100 个数,值为 1 - 100,现在随机抽取其中两个,将剩余的数次序打乱放入数组 a 中。
问题:请问抽取的是哪两个数?
要求:1. 数组 a 只能遍历一次。
2. 自定义的变量个数不能超过 5 个。
3. 不能另外自定义数组变量。(即:整个算法中只有一个数组 a)

请问这个如何解决?谢谢
...全文
414 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouzhanglong 2010-11-04
  • 打赏
  • 举报
回复
位图与求平方和,都不错
zhangyilina1987 2010-11-04
  • 打赏
  • 举报
回复
恩,都很好,
showjim 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 michael122 的回复:]
就是拿100个bit出来(4个int就够了),每个bit对应1-100中的数i是否在数组中,存在就设为1,不存在就是0.这样扫描一遍就可以把这100个bit设置完,最后看看哪两个数对应的bit是0就行了
当然,如果这样算扫描两遍的话,就用3楼的方法吧
[/Quote]
第二次不用扫描,用位运算与模运算可以找到那两个1的位置。
showjim 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
求和与平方和,然后解方程就可以
[/Quote]
开平方用快速算法或查表还可以,否则位图效率高
牛海朋 2010-11-04
  • 打赏
  • 举报
回复

你看这样行吗
double s=100+99;
double m=100*99;
for(int i=0;i<98;i++){
s=s+i+1-a[i];//两数之和
m=m*(i+1)/a[i];//两数之积
}
//求的两个数
int n1=(int) ((Math.sqrt(s*s-4*m)+s)/2);
int n2=(int) (s-n1);
michael122 2010-11-04
  • 打赏
  • 举报
回复
就是拿100个bit出来(4个int就够了),每个bit对应1-100中的数i是否在数组中,存在就设为1,不存在就是0.这样扫描一遍就可以把这100个bit设置完,最后看看哪两个数对应的bit是0就行了
当然,如果这样算扫描两遍的话,就用3楼的方法吧


[Quote=引用 9 楼 youzelin 的回复:]

引用 1 楼 michael122 的回复:
才100个数,用位图就搞定了
一个int 32位,4个int变量就够了


michael122, 不要说一半可以吗?如果有位图算法,能否说说,或者给个和此问题相关的位图算法链接也行!谢谢!
[/Quote]
youzelin 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 litaoye 的回复:]
平方和公式(2n+1)*(n+1)*n/6,100个数不会溢出


引用 6 楼 youzelin 的回复:

引用 3 楼 litaoye 的回复:
求和与平方和,然后解方程就可以


1^2 + 2^2 + 3^2 + ...... + n^2 平方和怎么求?求和公式是什么?循环平方累加不会溢出吗?
[/Quote]

多谢!
youzelin 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 michael122 的回复:]
才100个数,用位图就搞定了
一个int 32位,4个int变量就够了
[/Quote]

michael122, 不要说一半可以吗?如果有位图算法,能否说说,或者给个和此问题相关的位图算法链接也行!谢谢!
houjin_cn 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 youzelin 的回复:]
1^2 + 2^2 + 3^2 + ...... + n^2 平方和怎么求?求和公式是什么?循环平方累加不会溢出吗?
[/Quote]

1*1 + 2*2 + 3*3 + 4*4 + .....100*100 总值不超过 100*100*100,不会溢出
绿色夹克衫 2010-11-03
  • 打赏
  • 举报
回复
平方和公式(2n+1)*(n+1)*n/6,100个数不会溢出

[Quote=引用 6 楼 youzelin 的回复:]

引用 3 楼 litaoye 的回复:
求和与平方和,然后解方程就可以


1^2 + 2^2 + 3^2 + ...... + n^2 平方和怎么求?求和公式是什么?循环平方累加不会溢出吗?
[/Quote]
youzelin 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
求和与平方和,然后解方程就可以
[/Quote]

1^2 + 2^2 + 3^2 + ...... + n^2 平方和怎么求?求和公式是什么?循环平方累加不会溢出吗?
youzelin 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 michael122 的回复:]
才100个数,用位图就搞定了
一个int 32位,4个int变量就够了
[/Quote]

请问位图这个方法怎么实现?能不能说一下?谢谢
houjin_cn 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
求和与平方和,然后解方程就可以
[/Quote]
Very Good
绿色夹克衫 2010-11-03
  • 打赏
  • 举报
回复
求和与平方和,然后解方程就可以
houjin_cn 2010-11-03
  • 打赏
  • 举报
回复
1)先数组求和,得到那两个数的和;
2)循环搜索出其中一个数;
3)用和减去这个数得到另外一个数;

没有使用新数组,使用的变量: 两个循环下标 + 一个总和 + 两个结果 = 5个变量
michael122 2010-11-03
  • 打赏
  • 举报
回复
才100个数,用位图就搞定了
一个int 32位,4个int变量就够了

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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