C語言程式設計:有n個人圍成一圈,順序排號。從第一個人開始報數...
但是,看這些答案的程式,太麻煩的居多。
做而論道針對這個問題,寫了一個程式,自我感覺是最簡短的。呵呵,歡迎網友拍磚。
程式如下:
==============================
#include <stdio.h>
#define N 5 //人數
void main()
{
int a[N] = {0}, i = 0, call_n = 0, out_n = 0;
while (1) { //迴圈報數
if(a[i] == 0) { //如果健在
if (out_n == (N - 1)) break; //如果僅剩一人
call_n++; //報數
call_n %= 3; //最大為3,到了3就從0開始
if(call_n == 0) {a[i] = 1; out_n++;} //為0(即3)出局
}
i++; i %= N; //迴圈轉向下一人
}
printf("最後剩餘者的編號是:%d\n", i + 1);
}//------------------完
==============================
有些題目中,要求使用指標,其實也不難,指標和陣列是統一的,程式如下:
==============================
#include <stdio.h>
#define N 5 //人數
void main()
{
int a[N] = {0}, i = 0, out_n = 0, call_n = 0, *p;
p = a;
while (1) { //迴圈報數
if(*p == 0) { //如果健在
if (out_n == (N - 1)) break; //如果僅剩一人
call_n++; //報數
call_n %= 3; //最大為3,到了3就從0開始
if(call_n == 0) {*p = 1; out_n++;} //為0(即3)出局
}
p++; if (p == a + N) p = a; //迴圈轉向下一人
}
printf("最後剩餘者的編號是:%d\n", p + 1 - a);
}//------------------完
==============================