回 帖 发 新 帖 刷新版面

主题:请教

我自己写的程序,要求是 1到13 从第3个数开始数起,每相隔的5个数输出,被输出的数不能在被计入。例如 3+5=8  就输出8,下次数的时候,8就不能在数了,一直输出13个数的顺序。

写的程序编译通过,但运行不正确,找了很久不知道错误在哪里,还请教!

#include <iostream.h>

void main()
{
    int i;
    int j;
    int k;
    int a[14]={0,1,2,3,4,5,6,7,8,9,10,11,12,13};
    int t;
    int flag[14];
    for(k=0;k<14;k++)
    {
        flag[k]=1;
    }

    for(t=13,j=i=3;t>0;)
    {
        if(j>13)
        {
            j=j-13;
        }
        while(flag[j]==1)
        {
            j++;
            if(j-i==5)
            {
                cout<<"Die "<<j<<"Zahl ist"<<a[j];
                i=j+1;
                flag[j]=0;
                t--;
            }
        }
        while(flag[j]==0)
        {
            i++;
        }
    }
        
}

回复列表 (共6个回复)

沙发

while(flag[j]==0)
        {
            i++;
        }

这里都是死循环了...

板凳

while(flag[j]==1)
        {
            j++;
            if(j-i==5)
            {
                cout<<"Die "<<j<<"Zahl ist"<<a[j];
                i=j+1;
                flag[j]=0;
                t--;
            }
        }
这就已经是死循环了!!!!!!!!
你再好好的想想吧!!!!!~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~数组flag[j]==1这什么是不成立!!!!

3 楼

谢谢楼上两位提醒,的确,多看几遍,问题越来越多。我自己在想想

4 楼

我对循环估计还是有点问题,例如求完数的问题,就是一个数如果恰好等于它的因子之和
例如6=1+2+3.
我自己写的程序,感觉不会进入死循环的阿。可结果就是不对

好心人,帮我看看吧

void wanshu(){
    int i;
    int j=1;
    int sum=0;

    cout<<"The wanshu von 0 bis 1000 lautet: "<<endl;

    for(i=2;i<1000;i++){
                for(j=1;j<i;j++){
            if(i%j==0){sum+=j;}
            
        }
        if(i==sum) {cout<<i<<"  ";}
    }
}

5 楼

刚刚自己去调试了一下,第一次的循环 sum的值就从700到998了,这是为什么呢?很是好奇,在线等答案

6 楼

找到第一个问题,sum的初值问题,现在程序改为

for(i=2;i<1000;i++){
       for(j=1,sum=0;j<i;j++){
            if(i%j==0){sum+=j;}
            cout<<"The sum is "<<sum<<endl;
            break;
        }
        if(i==sum) {cout<<i<<"  ";}
    }

sum的值一直都是1,为什么?

我来回复

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