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
语句,是不是这个语句出了问题了!大家帮我看看了!

public class Try{
public static void main(String[] args){
int length=500;
int index=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;
for(int p=0;p<store.length;p++){
  if(store[p]==t)break;
   store[index]=t;    
  }
index=index+1;
}

}
  for(int k=0;k<store.length;k++)
  if(store[k]!=0)
  System.out.print(store[k]+" ");
}
}

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中除了这些数以外的就可以了,我想,找素数的代码应该简单多了吧,而且还不用考虑重复的问题 Smile 个人意见,仅供参考 呵呵

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楼前辈的分析还是很有道理的,值得参考.不过,根据楼主的思路,我稍微改了下楼主的代码,就可以了,不过输出有些乱,我不高兴排序了Tongue

public class Try{
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;
for(int p=0;p<store.length;p++){
if(store[p]==t){store[q]=0;store[p]=t;}
}
q++;}
}
for(int k=0;k<store.length;k++)
if(store[k]!=0)
System.out.print(store[k]+" ");
}
}

虽然目的是达成了,不过我自己也改出了问题 Embaressed
if(store[p]==t){store[q]=0;store[p]=t;}这句我自己感觉store[p]=t是没用的,因为if已经这么判断了,但是如果不加,程序就会有问题Stupid
还有上面为什么不能颠倒,即store[q]=t;store[p]=0;如果这样也会有问题,但从我自己的理解来看似乎都成立Stupid
似乎更添乱了Embaressed

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 Smile 关键是最后是附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

可以啊~ 我试过,除了输出顺序不一样,别的就没什么区别 Smile
我的理解是,虽然P,Q值的确不是一个概念,但都是STORE[]数组里的元素,同一个值,只要使STORE[]数组里也只有唯一值对应就可以了
如有不妥,还望赐教 Smile

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