有M个小孩子围成一圈做游戏,每个小孩子都有一个初始的号码。游戏有X步,每一步的操作方法都相同:每个小孩子把自己手上的号码改写成自己(原来的号码加上右手边的小孩子的号码)除以100的余数。请问你:经过X步之后,每个小孩子手上的号码是多少? 比如:有3个初始编号为{1,2,3}的小孩子,第一步操作完成之后,他们的编号变成了{1+2,2+3,3+1}即{3,5,4}。
input
输入有N组测试数据。每组测试数据有2行: 第一行包含M和X。 第二行包含M个不超过100的整数。
output
输出数据有N行,每行是一组测试数据的结果。注意:两个数字之间只有一个空格。每行以一个空格结尾
#include<iostream>
using namespace std;
int main()
{
int n; //n组数据
cin>>n;
while(n--)
{
int m,x; //每组m个小孩,执行x次
cin>>m>>x;
int a[m],b[m]; //a[]用来计算,b[]用来记录上一次的数据,两个数组以此避免数组混乱
for(int i=0;i<m;i++)
cin>>a[i];
while(x--) //执行x次
{
for(int i=0;i<m;i++)
b[i]=a[i];
for(int i=0;i<m-1;i++)
a[i]=(a[i]+b[i+1])%100;
a[m-1]=(a[m-1]+b[0])%100;
}
for(int i=0;i<m;i++)
cout<<a[i]<<" ";
cout<<endl; //每组数据处理后要加空格
}
return 0;
}
错误代码一
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--){
int m,x;
cin>>m >>n ;
int a[m],temp;
for(int i=0;i<m;i++)
cin>>a[i] ;
while(x--){
temp=a[0];
for(int j=0;j<m-1;j++)
{
a[j]=(a[j]+a[j+1])%100;
a[j]=(a[j]+temp)%100;
}
}
for(int k=0;k<m;k++){
cout<<a[k]<<" ";
}
cout<<endl;
}
return 0;
}
错误代码二
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n;
scanf("%d ",&n);
while(n)
{
n--;
int m,x;
scanf("%d %d ",&m,&x);
int a[m],b[m];
for(int i=0;i<m;i++)
scanf("%d ",&a[i]);
while(x)
{
x--;
for(int i=0;i<m;i++)
b[i]=a[i]%100;
for(int i=0;i<m-1;i++)
a[i]=a[i]+b[i+1];
a[m-1]=a[m-1]+b[0];
}
for(int i=0;i<m;i++)
printf("%d ",a[i]);
printf("\n");
}
return 0;
}