约瑟夫环简单模拟

作者在 2012-10-29 14:46:40 发布以下内容
/*
*有n个人围成一圈,顺序排号,从第一个人开始报数,
*凡报到3的人退出圈子,最后留下的是第几号。
*/
#include <stdio.h>

const int N = 100;

int main(){
    int num[N], *p, i, cnt, k;
    int n;

    printf("输入一个正整数:");
    scanf("%d", &n);
    p = num;

    for(i=0; i<n; i++){
        *(p+i) = i+1;
    }

    i = 0, cnt = 0, k = 0;
    while(cnt<n-1){
        if(0!=*(p+i)){
            k++;
        }
        if(3==k){
            *(p+i) = 0;
            cnt++;
            k = 0;
        }
        i++;
        if(n==i){
            i = 0;
        }
    }//while

    while(0==*p){
        p++;
    }

    printf("最后剩下的是%dn", *p);

    return 0;
}
 
基础编程 | 阅读 943 次
文章评论,共0条
游客请输入验证码
浏览18300次
文章归档