C練習問題8-4報数(20点)

6768 ワード

カウントゲームは、n人が輪になって、順番に1からnまで番号を編んでいます.最初の人から数え、m(
この問題では、関数を記述し、各人の終了順序番号を指定する必要があります.
関数インタフェース定義:void CountOff(int n,int m,int out[]);
そのうちnは初期人数である.mはゲームで規定された脱退順位(nより小さい正の整数を保証)である.関数CountOffは各人の脱退順序番号を配列out[]に存在させる.C言語配列の下付きは0から始まるので、i番目の位置の人はout[i-1]番目の脱退である.
審判試験プログラムのサンプル:
#include 
#define MAXN 20

void 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("
"
); return 0; } /* */

入力サンプル:11 3
出力サンプル:4 10 1 7 5 2 11 3 8
void CountOff( int n, int m, int out[] )
{
    int i,t=0,count=1;
    for(i=0;i<n;i++)
    out[i]=0;
    i=0;
    while(count<=n){
        i++;
        if(out[t]!=0)
        i--;
        if(i==m){
            i=0;
            out[t]=count;
            count++;
        }
        t++;
        if(t>=n)
        t=0;
    }
}

初めてジョセフ問題に触れてhhhhを調べた