【问题标题】:Why is this code not working? Output is not being printed为什么这段代码不起作用?未打印输出
【发布时间】:2017-05-19 12:11:04
【问题描述】:

当我在 devc++ 编译器中编译时,没有打印输出。有没有逻辑错误?这个程序应该从用户那里接受一个数字,打印大于给定数字的最小回文数。

这是来自 SPOJ PALIN 的问题

包括

使用命名空间标准;

int main() {

int t;

cin>>t;
cout<<endl;

while(t--)
{long long int i;
long long int k;
int flag=1;
long long int n;
int a[10000000];
    cin>>n;
    n++;
    start:
    i=0;
    while(n!=0)
    {
        a[i]=n%10;
    i++;
    n=n/10;}
    i--;
    k=i;
    for(int j=0;j<=k;j++)
{   
    if(a[i]!=a[j])
    {flag=0;break;}
    else
    i--;
}
if(flag==1)
cout<<n<<endl;
else
{n++;goto start;}

}
    return 0;

}

【问题讨论】:

    标签: c++14


    【解决方案1】:

    您尚未初始化标志变量。 if(a[i]==a[j]) 那么该标志将保持未初始化状态,并且在检查 if 条件时可能会产生问题,除非它的默认值为 0。(我不确定它会是)。我还可以看到,根据您的代码,flag 的值永远不会变为 1。

    #include<iostream>
    using namespace::std;
    int main()
    {
        int t;
        cin>>t;
        cout<<endl;
        while(t--)
        {
            long int i, k, n;  int a[1000];  int flag = 1, duplicaten;
            cin>>n;
            n++;
    
            start:
            //cout<<"inside start : n = "<<n<<"\n";
            flag=1; i=0;
            duplicaten=n;
            while(n!=0)
            {
                a[i]=n%10;
                i++;
                n=n/10;
            }
            n=duplicaten;
            i--;
            k=i;
            //cout<<"number of digits of n = "<<i+1<<"\n";
            for(int j=0;j<=k;j++)
            {
                if(a[i]!=a[j])
                {
                    flag=0;
                    break;
                }
                else
                i--;
            }
            //cout<<"flag = "<<flag<<endl;
            if(flag==1)
            {
                //cout<<"FOUND!!\n";
                cout<<n<<endl;
            }
            else
            {
                n++;
                //cout<<"NOT found\n";
                goto start;
            }
        }
        return 0;
    }
    

    您可以自己更改数据类型的大小并至少投票赞成这个答案。 < Output before using duplicaten : link to image >

    【讨论】:

    • 也适当地缩进你的代码,并尽量让其他人更容易理解你的程序。这是一个简单的程序,我可以看到,当您的程序变大时,您的风格可能会在稍后阶段产生问题。
    • 先生,即使初始化为1,代码也不起作用。在线判断显示超出时间限制,在devc++编译器中无法运行。
    • 这样想。假设在一些迭代之后你的程序遇到了一个回文数。那你现在怎么办。您的程序永远不会将 flag 设置为 1 并将继续迭代,因此条件 flag==1 只有在有两个连续回文数并且用户输入了两者中较小的一个时才会为真。如果您检查的数字是否为回文,您需要另一个标志变量来设置。您在 for 循环中所做的事情并没有给您任何结果。至于时间复杂度,您可以在这里做很多事情,例如:
    • 1.内部 for 循环最多只能达到一半的位数。 2. 一旦确定数字不是回文,就可以跳出 for 循环。您无需再检查任何数字。 3.其中最重要的一点是,在线评判软件并不那么可靠。当我的代码在几毫秒内运行良好并输出正确的输出时,我在hackerrank 上有无数的经验,而它显示的超时时间为 2 秒。所以不要气馁,但对你来说并非如此。我没有给你工作代码,因为我认为你是一个新手程序员
    • 并尝试自己解决这些小问题。如果您似乎找不到问题,只需在迭代内的主要操作之后放置多个输出所有需要变量的值的 cout,并检查每个步骤中不需要的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多