時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:2
描寫敘述
n 個人站成一行玩乙個報數遊戲。全部人從左到右編號為 1 到 n。遊戲開始時,最左邊的人報 1。他右邊的人報 2,編號為 3 的人報 3,等等。當編號為 n 的人(即最右邊的人)報完 n 之後,輪到他左邊的人(即編號為n-1 的人)報 n+1,然後編號為 n-2 的人報 n+2。以此類推。當最左邊的人再次報數之後,報數方向又變成從左到右,依次類推。
為了防止遊戲太無聊,報數時有乙個特例:假設應該報的數包括數字 7 或者是 7 的倍數。他應當用拍手取代報數。
下表是 n=4 的報數情況(x 表示拍手)。
當編號為 3 的人第 4 次拍手的時候。他實際上數到了 35。
人12343
2123
報數123
456x
89人4
3212
3432
報數10
111213x
1516x18
人123
4321
23報數1920x
2223
242526x
人432
1234
32報數x
2930
31 32
3334x36
給定 n,m 和 k。你的任務是計算當編號為 m 的人第 k 次拍手時,他實際上數到了幾。
輸入
輸入包括不超過 10 組資料。每組資料佔一行。包括三個整數 n,m 和 k(2<=n<=100, 1<=m<=n, 1<=k<=100)。輸入結束標誌為 n=m=k=0。
輸出對於每組資料,輸出一行。即編號為 m 的人第 k 次拍手時,他實際上數到的那個整數。
例子輸入
4 3 14 3 2
4 3 3
4 3 4
0 0 0
例子輸出
1721 27
35
**湖南省第七屆大學生計算機程式設計競賽
一道簡單的模擬題:要模擬出現的情況,主要要推出乙個規律 在邊界的位置時,下乙個報數的位置就是 2*n-2。(我也不知道是怎麼推出來的)
這樣就能夠推算出 每乙個編號 下乙個報數的位置;直接進行推斷。
#include #include bool judge(int n)//推斷函式,推斷是否含7,或者是7的倍數
return false;
}int main()
}printf("%d\n",i);
}return 0;
}
還看到別人的還有一種思路,直接找到規律,依據規律暴力求解。
分成了兩個部分進行考慮,邊界情況就直接是2*n-2,中間的間隔是兩個數迴圈變化的。
#include #include using namespace std;
bool is7( int n )//推斷
return false;
}int main()}}
else}}
}}
return 0;
}
換一種思路。直接進行模擬,依照先順序,後倒序進行模擬;
#include #include bool judge(int n)//推斷
return false;
}int main()
}if(i==n)}}
if(flag) break;
i=1;//回溯到順序}}
}return 0;
}
山東省第七屆ACM程式設計競賽
sdutoj 3560 3570 水題 include include define mem a,x memset a,x,sizeof a using namespace std typedef long long ll const int n 100010 int a 5 int main re...
第七屆福建省大學生程式設計競賽
b 計算得分的期望 include include include include using namespace std int main return 0 e 直接根據牌的數量來計算,直接拿n 0.5就是答案。include include include define iloveu retur...
2016 第七屆福建省大學生程式設計競賽
a.b.c.題意 兩人輪流玩卡片,共n 2張,每次隨機抽一張,比較大小,贏了的話加一分勝點,求fat brother的期望勝點。思路 兩人獲勝的期望是相等的,所以直接n 2就是結果了 include include using namespace std const int n 2e4 5 int ...