题目描述
有 N 个人在玩一种“敲7”游戏,游戏的规则是这样的:第 x 个人从 t 开始报数,然后按顺序报数,
当某人报的数是 7 的倍数或数字中含有 7 时,便被淘汰,剩下的人继续报数,直到只剩下一个人。
现求最终剩下的人编号?
输入
一行三个数 N,x,t。
输出
共一行一个数表示最终剩下的人的编号。
样例输入
4 3 6
样例输出
3
数据规模与约定
时间限制:1 s
内存限制:256 M
100% 的数据保证 1≤N,x,t≤1000
代码
#include <stdio.h>
int arr[1005];
int include_seven(int num) {
int t = num;
while (t > 0) {
if (t % 10 == 7) {
return 1;
}
t /= 10;
}
return 0;
}
void knock_seven(int *arr, int n, int x, int t) {
int index = n;
while (index > 1) {
if (x > n) {
x = 1;
}
if (arr[x] != 0) {
arr[x] = t;
if (arr[x] % 7 == 0 || include_seven(arr[x])) {
arr[x] = 0;
index--;
}
t++;
}
x++;
}
for (int i = 0; i <= n; i++) {
if (arr[i]) {
printf("%d", i);
return ;
}
}
}
int main() {
int n, x, t;
scanf("%d%d%d", &n, &x, &t);
for (int i = 0; i <= n; i++) {
arr[i] = i;
}
knock_seven(arr, n, x, t);
return 0;
}