作者byend (漫步)
看板java
标题Re: [问题] 发散数列求最近值~
时间Tue Jul 10 09:50:11 2012
我终於看懂题目了... 太久没弄种问答题...Orz
你可能把解题方向弄错了..
我把题意写出来...你应该就可以推出答案了..
※ 引述《tonyshan (Iamyourfather)》之铭言:
: 求离70最近的偶数:
: 下面的程式码是检查70以下的部分
: 用i减去的方式去解 i到1000以後跳出
: 我写的方法是
: class Test02{
: int[] array = {0,18,57,75,81};
=> 从这个 array 中找出最接近 70 的数字
: int diff = integer.MAX_VALUE;
=> 这是 upper-bound , 任何数减 70 都不可能大於这个值
=> 记得用 abs, 简单一些.
: int[] ans = new int[2]; //回答用的数列
=> 答案可能有两个, Ex: 68, 72 都是最接近 70 的偶数..
当然...如果就这样 End 有烂尾的嫌疑, 我写个虚拟码 你参考看看..
简化一下, 把 ans 当作一个 queue
for each element, e, in array
if e is an even number
if abs(e-70) <= diff
if ans is full
remove the head element of ans
end if
add e to the tail of ans
diff = abs(e-70)
end if
end if
end for
print out ans
写完 pesudo code, 我发现这题也没有那麽表面上看的简单
的确适合当考题...:P
: -----------------------------------------------
: for(int i = 0;i<diff;i++){
: for(int j = 0;j<array.length;j++){
: if(70-i==array[j]&&(70-i)%2==0){
: ans[0]=array[j];
: }
: }
: if(i>1000) //用i值检查到1000
: break;
: }
: System.out.println("离70以下离最近的是"+ans[0]);
: 可是这样写有一个徵结点就是...
: 当数列里面没有0时这个程式码没有问题
: 但是遇到数列有0和70以下另一个偶数时会列印出离70最近是0
: 我已经改了一整天没办法改出来 感觉好像鬼打墙 越写越多~
: 版上高手能帮忙回答~谢谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 76.104.157.183
1F:推 tonyshan:这题用绝对值去做真得比较简单 07/10 20:22
2F:→ tonyshan:还有不好意思 请问ans is full是什麽意思 07/10 20:24
3F:→ byend:Ans 是不是已经满了, 如果满了, 就把前一个剔除, 再将新的 07/11 00:47
4F:→ byend:加到 ans 的尾端.. ans 是一个Queue.. 07/11 00:49
补个说明好了. 用 Mod 就可以简单实现 queue.
int intdex =0;
.........
ans[index] = e; // even number
index = (index++) % 2;
※ 编辑: byend 来自: 76.104.157.183 (07/11 11:09)