Topic: 问题在哪里(没有符合我的要求)(找出100以内的非素数) |
Print this page |
1.问题在哪里(没有符合我的要求)(找出100以内的非素数) | Copy to clipboard |
Posted by: fossil Posted on: 2005-08-26 22:09 我说一下我的要求: 找出100以内的非素数。 我的想法是:以2为开始承以它的倍数,即(2,4,6等)再从3开始,即(6,9等)问题是:为什么6,12 等数会重复出现,我用了 for(int p=0;p<store.length;p++) if(store[p]==t)break 语句,是不是这个语句出了问题了!大家帮我看看了!
|
2.Re:问题在哪里(没有符合我的要求) [Re: fossil] | Copy to clipboard |
Posted by: xzhslr Posted on: 2005-08-27 01:50 不理解!为什么很简单的程序作得那么复杂呢?这么多的循环不是浪费时间吗? 首先 for(int k=0;k<store.length;k++){ if(store[k]!=0) System.out.print(store[k]+" "); }//注意方括号的对称 才对! 其次:当j做完第一次循环开始第二次这时候i=3、j=2,t=6与第一次的6重复,但store[p]=4(p=0),store[p]!=t,你得index已经累加,插入的时候index当然顺延向后插入!!!其实你已经获得6。 public class Help{ public static void main(String arg[]){ int length = 100; int index = 0; int i; int j; int p; int k; int[] store=new int [length]; for(i=2;i<=100;i++){ for(j=2;j<=100/i;j++){ int t=i*j; for(p=0;p<store.length;p++){ if(p<99&&store[p]!=t){ continue; }else{ if(store[p]==t){//重复 break; } if(p==99){//添加 store[index]=t; index=index+1; } } } } } for(k=0;k<store.length;k++){ if(store[k]!=0) System.out.print(store[k]+" "); } 这是我改的,编写的也不好,但是能用,希望高手指正! |
3.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: fossil Posted on: 2005-08-27 09:56 是的!我想用其他方法试试看! |
4.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: truthawp Posted on: 2005-08-27 12:58 为什么不反过来想呢? 个人觉得找素数应该比较简单,,然后再找到100中除了这些数以外的就可以了,我想,找素数的代码应该简单多了吧,而且还不用考虑重复的问题 个人意见,仅供参考 呵呵 |
5.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: fossil Posted on: 2005-08-27 13:39 是啊!找素数的方法我知道!谢谢大家了!我想用反过来的方法解决!呵呵! |
6.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: truthawp Posted on: 2005-08-27 19:26 恩~ 是这样啊~ 2楼前辈的分析还是很有道理的,值得参考.不过,根据楼主的思路,我稍微改了下楼主的代码,就可以了,不过输出有些乱,我不高兴排序了
虽然目的是达成了,不过我自己也改出了问题 if(store[p]==t){store[q]=0;store[p]=t;}这句我自己感觉store[p]=t是没用的,因为if已经这么判断了,但是如果不加,程序就会有问题 还有上面为什么不能颠倒,即store[q]=t;store[p]=0;如果这样也会有问题,但从我自己的理解来看似乎都成立 似乎更添乱了 |
7.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: fossil Posted on: 2005-08-28 09:28 根据楼上的问题我作了说明程序: public class Win{ public static void main(String[] args){ int length=500; int index=0; int q=0; int[] store=new int [length]; for(int i=2;i<=100;i++){ for(int j=2;j<=100/i;j++){ int t=i*j; store[q]=t; System.out.print("Q: "+store[q]+" "); System.out.print(q+" "); for(int p=0;p<store.length;p++){ if(store[p]==t){ store[q]=0; System.out.print("P: "+p); store[p]=t; } } q++;} } for(int k=0;k<store.length;k++) if(store[k]!=0) System.out.print(store[k]+" "); } } 拿出一组数据可以说明: 第一组: 第一次:Q=6 q=1 P=1 第二次:Q=6 q=46 P=1 第二组: 第一次:Q=12 q=4 P=4 第二次:Q=12 q=51 P=4 可以看出p的值是一样的,所以不难理解 store[p]=t这个运算就是在附值运算。 如果没有这一句。整个for循环就没有意义了,也就是说一直在store[q]=0;这个运算。所以最后是什么也不输出了!第二个问题也是这样的! |
8.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: truthawp Posted on: 2005-08-28 11:45 恩 理解了thx 关键是最后是附0还是附t,store[p]=0;store[q]=t这样颠倒也可以 |
9.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: fossil Posted on: 2005-08-28 12:08 不行!{store[q]=0;store[p]=t;} 这句还是不能换的!因为P和Q的值不是一个概念! |
10.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: truthawp Posted on: 2005-08-28 12:39 可以啊~ 我试过,除了输出顺序不一样,别的就没什么区别 我的理解是,虽然P,Q值的确不是一个概念,但都是STORE[]数组里的元素,同一个值,只要使STORE[]数组里也只有唯一值对应就可以了 如有不妥,还望赐教 |
11.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: fossil Posted on: 2005-08-28 15:22 。。。对不起!可以通过!我打了两个Q了!呵呵! |
12.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: eva841205 Posted on: 2005-10-12 16:14 问题的关键在于当Q=P的时候 |
13.Re:问题在哪里(没有符合我的要求)(找出100以内的非素数) [Re: fossil] | Copy to clipboard |
Posted by: mapletree Posted on: 2005-10-24 00:55 按照搂主的思想重新设计了一下。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |