C練習問題8-4報数(20点)
カウントゲームは、n人が輪になって、順番に1からnまで番号を編んでいます.最初の人から数え、m(
この問題では、関数を記述し、各人の終了順序番号を指定する必要があります.
関数インタフェース定義:void CountOff(int n,int m,int out[]);
そのうちnは初期人数である.mはゲームで規定された脱退順位(nより小さい正の整数を保証)である.関数CountOffは各人の脱退順序番号を配列out[]に存在させる.C言語配列の下付きは0から始まるので、i番目の位置の人はout[i-1]番目の脱退である.
審判試験プログラムのサンプル:
入力サンプル:11 3
出力サンプル:4 10 1 7 5 2 11 3 8
初めてジョセフ問題に触れてhhhhを調べた
この問題では、関数を記述し、各人の終了順序番号を指定する必要があります.
関数インタフェース定義: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を調べた