【题目描述】
甲乙丙丁决定玩一个报数的游戏来打发时间。游戏规则为四个人从1开始轮流进行报数,但如果需要报出的数是7的倍数或含有数字7则直接跳过。
此外大家约定,在总共报出了n个数后(不计入被跳过的数)游戏结束。现在需要你来帮忙统计,游戏过程中每个人各自跳过了几次。
【输入格式】
从标准输入读入数据。 输入仅一行,包含一个正整数n,表示报出了多少个数后游戏结束。
【输出格式】
输出到标准输出。 输出共四行,每行一个整数,以此表示甲乙丙丁四人在游戏过程中跳过的次数。
【样例输入】
20
【样例输出】
2
1
1
0
【样例解释】
报数过程为:
甲:1,乙:2,丙:3,丁:4
甲:5,乙:6,丙:跳过,丁:8
甲:9,乙:10,丙:11,丁:12
甲:13,乙:跳过,丙:15,丁:16
甲:跳过,乙:18,丙:19,丁:20
甲:跳过,乙:22,丙:23,丁:24
在丁报出24后,四个人总计报出了20个数,游戏结束。
【预备知识-队列的用法】
c++的队列queue模板类定义在头文件中。 队列遵循先进先出原则,也就是说新加入的元素会放在队尾。 queue的常见操作:
声明一个队列:queue<int>q;q.size()返回队列长度q.empty()队列为空,则返回trueq.push(a)将a放到队列的末端q.front()返回队首的元素(也就是队列第一个元素,先进先出)q.pop()弹出队列第一个元素(不返回任何值)q.back()返回最后被加入到队列的元素(也就是队尾元素)
【AC-c++代码如下】
#include<iostream>
#include<queue>
using namespace std
;
bool judge(int x
){
if(x
%7==0)
return true;
while(x
!=0){
int y
=x
%10;
if(y
==7)
return true;
x
=x
/10;
}
return false;
}
int main(){
int a
[4]={0,0,0,0};
queue
<int> person
;
for(int i
=0;i
<4;i
++){
person
.push(i
);
}
int n
;
cin
>>n
;
for(int j
=1;j
<=n
;j
++){
int temple
;
temple
=person
.front();
if(judge(j
)){
a
[temple
]++;
n
++;
}
person
.pop();
person
.push(temple
);
}
for(int k
=0;k
<4;k
++)
cout
<<a
[k
]<<endl
;
return 0;
}