CCF CSP 201912-1 報數 100分
阿新 • • 發佈:2021-01-29
201912-1
問題描述
甲乙丙丁決定玩一個報數的遊戲來打發時間。遊戲規則為四個人從1開始輪流進行報數,但如果需要報出的數是7的倍數或含有數字7則直接跳過。
此外大家約定,在總共報出了n個數後(不計入被跳過的數)遊戲結東。現在需要你來幫忙統計,遊戲過程中每個人各自跳過了幾次。
輸入格式
從標準輸入讀入資料。
輸入僅一行,包含一個正整數n,表示報出了多少個數後遊戲結束。
輸出格式
輸出到標準輸出。
輸出共四行,每行一個整數,依次表示甲乙丙丁四人在遊戲過程中跳過的次數。
樣例輸入
20
樣例輸出
2
1
1
0
演算法思想
設定一個變數count計算將要報的數,判斷count是否已經報完,則是判斷count減去已經跳過的個數是否小於等於num,若否,將count加1;若是,則判斷是否有包含7的數或者是7的倍數,若是,則判斷是輪到甲乙丙丁哪個報的,再將此人的次數加1;再將相應的跳過的次數輸出。
資料結構設計
使用整型變數int;
int count=1,jia=0,yi=0,bing=0,ding=0;
演算法步驟
1.定義報的數字count=1,甲乙丙丁的跳數,jia=0,yi=0,bing=0,ding=0。
2.輸入需要報的數num
3.判斷已經將num個數報完,若是,跳轉4,若否,轉到8
4.將判斷此數是否是7的倍數或包含7的值賦值給seven
5. seven是否等於1,若是,則 轉6
6.判斷是輪到甲乙丙丁哪個人報的,輪到的人將跳數加1
7.將count加1
8.輸出甲乙丙丁跳過的個數。
實現技術
主要是判斷是否已經報完數,用count-甲乙丙丁已經跳的次數是否≥num
程式碼實現
#include <iostream>
using namespace std;
int main()
{
int count=1,jia=0,yi=0,bing=0,ding=0;//count計算當前報數報到哪了;
int num,seven;
cin>>num;
while(count-(jia+yi+bing+ding)<=num)
{
seven=count%7==0 || count%10==7 || count/10%10==7 || count/100==7;
if(seven==1)
{
if(count%4==1)
jia++;
else if (count%4==2)
yi++;
else if (count%4==3)
bing++;
else if (count%4==0)
ding++;
}
count++;
}
cout<<jia<<endl<<yi<<endl<<bing<<endl<<ding<<endl;
return 0;
}
測試結果