ccf-csp #201912-1 报数
2020-04-07 18:29
1136 查看
题目思路
题意在题目描述中已经表达得很清楚了,如果注意读题,不遗漏信息,这应该是一道妥妥的水题。
设变量 cntcntcnt 表示报出了多少个数字(不计入被跳过的数),变量 numnumnum 表示包含跳过的数,当前报到多少,数组 aaa 记录四个人被跳过的次数,函数 checkcheckcheck 检查 numnumnum 是否为包含7或者为7的倍数的数。
我们只要去模拟这个报数的过程,不断递增 numnumnum 的值,同时用 checkcheckcheck 函数检查是否需要跳过,如果不需要跳过就增加 cntcntcnt 的值,否则增加被跳过的次数。直到 cntcntcnt 的值等于 nnn 。
我们发现,(num−1)%4==0(num-1)\%4==0(num−1)%4==0的数是轮到甲报的,(num−1)%4==1(num-1)\%4==1(num−1)%4==1的数是轮到乙报的……,于是我们就可以在他们被跳过时,用 a[(num−1)%4)]++a[(num-1)\%4)]++a[(num−1)%4)]++ 进行计数。
代码如下
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 1e3 + 10; int n, a[10]; /** * 检查n是否为包含7或者为7的倍数的数 * 如果是就返回0,否则返回1 */ int check(int n) { if (n % 7 == 0) return 0; while (n) { if (n % 10 == 7) return 0; n /= 10; } return 1; } int main() { scanf("%d", &n); int cnt = 0, num = 0; while (1) { num++; if (check(num)) { cnt++; } else { a[(num - 1) % 4]++; } if (cnt == n) break; } for (int i = 0; i < 4; i++) printf("%d\n", a[i]); return 0; }
- 点赞 2
- 收藏
- 分享
- 文章举报
相关文章推荐
- CSP CCF 201912-1 报数 (Java) 简单方法
- CCF Java 报数游戏循环剔除类问题
- ccf-2019.12之报数
- ccf真题---2019.12-1报数
- CCF计算机软件能力认证试题:201912-1 报数
- [CCF自用]201912-1-报数(C++和Python)
- CCF 201912-1 《报数》 C++满分题解
- ccf-报数游戏
- ccf-Markdown--字符串模拟-
- CCF打酱油
- 8.5 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号那位
- 离散事件模拟:循环报数问题(2017年12月CCF第二题)
- Java-n个人报数
- 201703-2 CCF 学生排队 100分代码
- CCF-201503-1-图像旋转
- ccf 地铁修建spfa (得分85到100)
- python ccf题解 201609-2 火车购票
- ccf-201412-2 Z字型扫描
- ccf 2015123 无线网络 100分(python实现)
- CCF 201709-2 公共钥匙盒