1. 程式人生 > >C語言程式設計:有n個人圍成一圈,順序排號。從第一個人開始報數...

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);
}//------------------完
==============================