ccf-csp #201912-1 报数
生活随笔
收集整理的這篇文章主要介紹了
ccf-csp #201912-1 报数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目思路
題意在題目描述中已經表達得很清楚了,如果注意讀題,不遺漏信息,這應該是一道妥妥的水題。
設變量 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; }總結
以上是生活随笔為你收集整理的ccf-csp #201912-1 报数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CF#1288A Deadline (函
- 下一篇: ccf-csp #201912-2 回收