链接:牛客网
来源:牛客网
睡前游戏中最简单又最好玩的游戏就是这个啦!
该游戏规则为:多名玩家轮流报数,当要报的数字中含有 7 或者是 7 的倍数时(例如 37,49),不能将该数报出来,要换一种提前规定好的方式报数,当一个人报错或者报慢了这个人就输了。
我们认为玩家是围成一圈进行游戏的,第 n 个人报完数之后,会轮到第 1 个人报数。
现在告诉你玩家的总人数以及你上一个人报的数(用数字表示,即便这个数含有 7 或者是 7 的倍数),你需要预测接下来 k 轮你要报的数字,当你需要报的数字含有 7 或者是 7 的倍数时,你需要输出字符 p。
输入描述
第一行一个整数 T,表示输入数据的组数。接下来每组数据中均只有一行数据,每行三个整数 n,a,k,分别表示玩家数量,你的上一位玩家报的数,你需要模拟的游戏轮数。
数据保证 1 ≤ T, n, k, a ≤ 100。
输出描述
共 𝑇 行,每行输出 𝑘 个整数或者字符 p。
示例
输出:
3
2 16 3
3 69 3
2 1 10
输出:
p 19 p
p p p
2 4 6 8 10 12 p 16 18 20
这个题目比较简单,总的来说就是遍历+判断就好。
首先审题:我们会得到玩游戏的总人数、你前一个人的报数和游戏轮次,根据这些,可以知道每轮我们要报的数字(第一轮仅需要,在给定的前一个人报的数的基础上+1即可;后面的轮次都是在当下数字的基础上加上人数)。然后再据此基础上,去判断该轮自己的数是否应该报出来。
然后就是实现代码:
#include<stdio.h>
int judge(int sum)
{
if(sum % 7 == 0)//如果是7的倍数,则直接return打印p
return 0;
else
{
int t = sum, res;
int flag = 0;//判断是否可以找到7
while(t)//这里其实就是判断一个数中是否含有7
{
res = t % 10;//每次得到最低位
if(res == 7)
{
flag = 1;//找到7后修改flag,跳出循环
break;
}
t = t / 10;//迭代t
}
if(!flag)//没有找到7,不满足输出p的条件
return 1;
else
return 0;
}
}
int main()
{
int t;
scanf("%d",&t);//共有t组数据
int num,a,k;
while(t--)
{
scanf("%d%d%d",&num,&a,&k);
int next = a + 1;//next为自己需要报的数字
for(int i=0;i<k;i++)
{
if(!judge(next))//判断是否需要需要输出p
printf("p ");
else
printf("%d ",next);
next = next + num;//因为下一轮到自己前,会经历num个人
}
printf("\n");
}
}