c++ - 测试 1 的运行时错误(Codeforces)

标签 c++ c++11

使用下面的链接

http://codeforces.com/problemset/problem/556/B

下面的代码使用 GNU C++11 编译器并且该代码运行良好 但我不知道它是如何工作的?

#include<iostream>
#include<conio.h>
#include<windows.h>
int test(long int n,long int number[])
{
    int flag=0;
    for(int i=0;i<n;i++)
    {
        if(number[i+1]==number[i]+1)
            flag++;
    }
    if(flag==n-1)
       return 1;
    else
        return 0;
}
void rot_gears(long int n,long int number[])
{
    system("cls");
    int t;
    for(long z=0;z<n*n;z++)
    {
        for(long i=0;i<n;i++)
        {
            if(i%2==0)
            {
                if(number[i]==n-1)
                {
                    number[i]=0;
                }
                else
                    number[i]++;
            }
            else if(i%2!=0)
            {
                if(number[i]==0)
                    number[i]=n-1;
                else
                    number[i]--;
            }
        }
         t=test(n,number);
        if(t==1)
            break;

      // output(n,number);
       //cout<<"\n\n";
    }
    if(t)
        std::cout<<"YES";
    else
        std::cout<<"NO";
}
int main()
{
    long int n,teeth,number[10000];
    std::cin>>n;
    std::cin>>teeth;
    for(long int i=n-1;i>=0;i--)

    {
        number[i]=teeth%10;
        teeth/=10;
    }

    // output(n,number);
    rot_gears(n,number);
    return 0;

}

最佳答案

我相信没有办法执行system("cls");在判断机上 - 只需将其从代码中删除即可。

i == n - 1 时你也越界了:

for(int i=0;i<n;i++)
{
    if(number[i+1]==number[i]+1)
    //       ^^^^^ here

尽管从技术上讲你不会超出数组边界,因为 n <= 1000 ,但无论如何您正在访问未初始化的数组元素。

关于c++ - 测试 1 的运行时错误(Codeforces),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099452/

相关文章:

c++ - 大输入段错误

c++ - ofstream.put 无法正常工作

C++11 自动和函数返回类型

c++ - N & (1<<x) == 什么时候为真?

C++ 错误 - '.' 标记前的预期主表达式|

c++ - 通过向右移动对值数组进行排序

c++ - 如何从派生构造函数初始化列表初始化模板基类的成员?

c++ - 如何在不初始化每个元素的情况下为数组保留空间?

c++ - 关于多重继承和歧义

c++ - 使用SFINAE分辨率区分普通模板参数和模板模板参数的技术