在做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";
}
}
但运行结果为
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(数组中对应位置))