一圈小孩做游戏

一圈小孩做游戏

描述

有M个小孩子围成一圈做游戏,每个小孩子都有一个初始的号码。游戏有X步,每一步的操作方法都相同:每个小孩子把自己手上的号码改写成自己原来的号码加上右手边的小孩子的号码除以100的余数。请问你:经过X步之后,每个小孩子手上的号码是多少? 比如:有3个初始编号为{1,2,3}的小孩子,第一步操作完成之后,他们的编号变成了{1+2,2+3,3+1}即{3,5,4}。

输入

输入有N组测试数据。每组测试数据有2行: 第一行包含M和X。 第二行包含M个不超过100的整数。

输出

输出数据有N行,每行是一组测试数据的结果。注意:两个数字之间只有一个空格。

代码

include <cstring>
#include <iostream>
using namespace std;
int main()
{
	int n,m,x,y;
	int a[200000];
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> m >> x;
		memset(a, 0, sizeof a);
		for(int i = 1; i <= m; i++)
		{
			cin >> y;
			a[i] = y;
		}
		for(int z = 1; z <= x; z++)
		{
			a[m + 1] = a[1];
			for(int i = 1; i <= m; i++)
				a[i] = a[i] + a[i + 1] % 100;
		}
		for(int i = 1; i <= m; i++)
			cout << a[i] << " ";
			cout << endl;
	}
	return 0;
}

思路

因为需要做几组数据的测试,所以最外层循环用来控制测试的组数,测试过程是一组接一组,输入应该写到外层循环中,并且用到了memset,其存在于cstring当中,它的作用就是清空数组,每测试完一组数据就清空一遍。假设有m个小孩,小孩是围成一圈加上题目给出的例子所以有a[m + 1] = a[1]。这样加下来按照题目要求利用循环计算即可。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值