回 帖 发 新 帖 刷新版面

主题:求帮我看下哪里问题!

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
     int falg=1,t;
    int a[6];
    
    
      while(falg!=0)
      {
       srand((int)time(0));
           for(int i=0;i<6;i++)
        a[i]=rand()%100+1;
        
                
            
        for(int i=1;i<6;i++)
            for(int j=0;j<6-i;j++)
               if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}
               for(int i=0;i<5;i++)
                  if(a[i]==a[i+1])falg++;//这里好像没有执行 
                  else falg=0;
                  
        }
          for(int i=0;i<6;i++)
     cout<<a[i]<<'\t';        
            
      
    system("PAUSE");
    return EXIT_SUCCESS;
}
题目是随即写出6个不重复的数 我这里还是会出现重复的为什么啊 ?

回复列表 (共9个回复)

沙发

单步调试,这么简单的问题,你咋写那么多重循环?

板凳

你不包含ctime吗

3 楼

if(a[i]==a[i+1])falg++;//这里好像没有执行 
感觉就这里没有执行啊

4 楼

“感觉没有执行”,您可以自己验证一下。在那里设置断点,或者添加一条printf语句,看看是否真的执行了。
[quote]        for(int i=1;i<6;i++)
            for(int j=0;j<6-i;j++)
               if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}
               for(int i=0;i<5;i++)
                  if(a[i]==a[i+1])falg++;//这里好像没有执行 
                  else falg=0;[/quote]
初看过去,似乎是三层循环,其实不是。注意第三个for并不是在第二个for语句的内部。
养成加括号的习惯,可以回避这些问题。

5 楼

for(int i=0;i<5;i++)
                  if(a[i]==a[i+1])falg++;//这里好像没有执行 
                  else falg=0;
这只能检查最后两个数,如果最后两数相等则重新产生随机数,否则输出六个数。可是前面5个数存在相等呢?
是不是改成:
   for(int i=0;i<5;i++)
                  if(a[i]==a[i+1]){
                      falg++;
                      break;
                      }
                  else falg=0;

6 楼


lz的这种算法效率太低,不如这样:
#include <iostream>
#include <vector>
#include <cstdlib>

using namespace std;

int main()
{
    int t;
    vector<int>a;
    srand(time(0));
    a.push_back(rand()%100+1);
    for(int i=0;i<5;i++){
        t=rand()%100+1;
        while(find(a.begin(),a.end(),t)!=a.end())
            t=rand()%100+1;
        a.push_back(t);
    }
    for(int i=0;i<6;i++)
        cout<<a[i]<<"\t";
    cout  << endl;
    return 0;
}

7 楼

楼上的好像是运用了stl的吧 这个我才刚刚开始看 我是新手 !书看起来有点困难毛  更别说运用了呵呵 ,不过我还是会坚持的! 我的这种算法是很低的 程序运行起来有时候很慢的

8 楼

[quote]for(int i=0;i<5;i++)
                  if(a[i]==a[i+1])falg++;//这里好像没有执行 
                  else falg=0;
这只能检查最后两个数,如果最后两数相等则重新产生随机数,否则输出六个数。可是前面5个数存在相等呢?
是不是改成:
   for(int i=0;i<5;i++)
                  if(a[i]==a[i+1]){
                      falg++;
                      break;
                      }
                  else falg=0;[/quote]
for(int i=0;i<5;i++)
                  if(a[i]==a[i+1])falg++;//这里好像没有执行 
                  else falg=0;  
这个为什么只能是检查最后2个呢?我不是用循环了吗?检查的是从a[0]==a[1]开始到最后的 然后其中有相等的就falg=0; 我的想法是这样子的 呵呵 !帮我解答下疑问谢谢

9 楼


一发现有两数相等时你就应该停止循环,也就是需要加一个break,此时flag!=0,如果不用break停止,它将继续检查后面的数,flag最终的值只能由最后两数确定。

我来回复

您尚未登录,请登录后再回复。点此登录或注册