关于c++在一维数组的问题

在做openjudge的时候遇到些问题
网址附上http://noi.openjudge.cn/ch0106/08/
我写的代码如下:

#include
#include
using namespace std;
int main()
{
    int N,NA,NB,b[100],a[100];
    cin>>N>>NA>>NB;
    for(int i=0;i<NA;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<100;i++)
    {
        a[i+NA]=a[i];
    }
    for(int i=0;i<NB;i++)
    {
        cin>>b[i];
    }
    for(int i=0;i<100;i++)
    {
        b[i+NB]=b[i];
    }
    NA=0;NB=0;N=0;
    for(int i=0;i<N;i++)
    {
        if(a[i]==0&&b[i]==2)
        {
            NA += 1;
        }
        if(a[i]==2&&b[i]==5)
        {
            NA += 1;
        }
        if(a[i]==5&&b[i]==0)
        {
            NA += 1;
        }
        if(b[i]==0&&a[i]==2)
        {
            NB += 1;
        }
        if(b[i]==2&&a[i]==5)
        {
            NB += 1;
        }
        if(b[i]==5&&a[i]==0)
        {
            NB += 1;
        }
    }
    if(NA>NB)
    {
        cout<<"A";
    }else if(NA<NB)
    {
        cout<<"B";
    }else
    {
        cout<<"draw";
    }
}

但运行结果为

img

NA=0;NB=0;N=0;
for(int i=0;i<N;i++)
这看着就不行啊,N刚设置为0,怎么就作为循环结束条件了呢???

12-15行,20-23行,容易越界

就看了几行,
for(int i=0;i<100;i++)
{
a[i+NA]=a[i];
}
a已经越界了。

int main()
{
    int N, NA, NB, a[100], b[100];
    cin >> N >> NA >> NB;

    for (int i = 0; i < NA; i++)
    {
        cin >> a[i];
    }
    for (int i = 0; i < 100; i++)
    {
        a[i] = a[i % NA]; //
    }
    for (int i = 0; i < NB; i++)
    {
        cin >> b[i];
    }

    for (int i = 0; i < 100; i++)
    {
        b[i] = b[i % NB]; //
    }

    NA = 0;
    NB = 0;
    // N = 0;
    for (int i = 0; i < N; i++)
    {
        if (a[i] == 0 && b[i] == 2)
        {
            NA += 1;
        }
        if (a[i] == 2 && b[i] == 5)
        {
            NA += 1;
        }
        if (a[i] == 5 && b[i] == 0)
        {
            NA += 1;
        }
        if (b[i] == 0 && a[i] == 2)
        {
            NB += 1;
        }
        if (b[i] == 2 && a[i] == 5)
        {
            NB += 1;
        }
        if (b[i] == 5 && a[i] == 0)
        {
            NB += 1;
        }
    }

    if (NA > NB)
    {
        cout << "A";
    }
    else if (NA < NB)
    {
        cout << "B";
    }
    else
    {
        cout << "draw";
    }

    //*
    cout << endl;
    cout << "A: ";
    for (int i = 0; i < N; i++)
    {
        cout << a[i] << " ";
    }
    cout << "\nB: ";
    for (int i = 0; i < N; i++)
    {
        cout << b[i] << " ";
    }
    //*/
}

N取值为0了,for循环直接终止。这是你这个输入错误的原因。

此处你不能用这种写法,你的本意是把他的周期数组生成出来,但是这里没有给定n的范围,所以当n过大,你的周期数组就不成立。
你可以考虑用取余的形式来进行周期的遍历(例:3(次数)%(周期数)3 = 0(数组中对应位置))


可以查看手册:c++-数组 中的内容