实验8-1-8 报数 (20 分)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                实验8-1-8 报数 (20 分)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                浙大版《C語言程序設(shè)計實驗與習(xí)題指導(dǎo)(第3版)》題目集
實驗8-1-8 報數(shù) (20 分)
報數(shù)游戲是這樣的:有n個人圍成一圈,按順序從1到n編好號。從第一個人開始報數(shù),報到m(<n)的人退出圈子;下一個人從1開始報數(shù),報到m的人退出圈子。如此下去,直到留下最后一個人。
本題要求編寫函數(shù),給出每個人的退出順序編號。
函數(shù)接口定義:
void CountOff( int n, int m, int out[] );其中n是初始人數(shù);m是游戲規(guī)定的退出位次(保證為小于n的正整數(shù))。函數(shù)CountOff將每個人的退出順序編號存在數(shù)組out[]中。因為C語言數(shù)組下標(biāo)是從0開始的,所以第i個位置上的人是第out[i-1]個退出的。
裁判測試程序樣例:
#include <stdio.h> #define MAXN 20void CountOff( int n, int m, int out[] );int main() {int out[MAXN], n, m;int i;scanf("%d %d", &n, &m);CountOff( n, m, out ); for ( i = 0; i < n; i++ )printf("%d ", out[i]);printf("\n");return 0; }/* 你的代碼將被嵌在這里 */輸入樣例:
11 3
輸出樣例:
4 10 1 7 5 2 11 9 3 6 8
我的代碼:
void CountOff( int n, int m, int out[] ){for(int i = 0; i < n; i++){out[i] = 0;}int x = m-1;x %= n;int term = 1;while(1){out[x] = term;//一共n個人,進(jìn)行了n輪就能結(jié)束了if(term == n) break;//算出下一個出局學(xué)生的位置for(int i = 0; i < m; i++){x++;x %= n;while(out[x] > 0)//大于0就說明這個玩家已經(jīng)出局了{x++;x %= n;}}term++;} }麻煩的地方就是算出下一個出局玩家的位置。原本想構(gòu)造結(jié)構(gòu),加一個變量用來記錄玩家是否出局。后來發(fā)現(xiàn)其實沒必要,可以初始化out[]為0,只要out[x]>0,就說明x+1已經(jīng)出局了。
總結(jié)
以上是生活随笔為你收集整理的实验8-1-8 报数 (20 分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: C++条形码生成器Aspose.BarC
- 下一篇: Simditor的快速使用
