• 有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位


    有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    解题思路: 从第一个人开始,逐个报数,谁报3就退出,并且重置报数,直到最后一个人后,又重新从第一个人继续报数,直到最终只剩一个人的时候退出即可。

    答案:

    #include <stdio.h>
    int main()
    {
    	int people[128], n;
    	printf("Please input how many people: ");
    	scanf_s("%d", &n);
    	for (int i = 0; i < n; i++) {
    		people[i] = i + 1; //对每个人顺序排号
    	}
    	int remain = n;
    	int num_off = 0;
    	int *p = NULL;
    	while (remain > 1) {
    		p = people;
    		while (p != people + n) { // 每次从第一个位置开始,直到最后一个位置,报数是一直递增的
    			if ((*p) != 0) {//若这个位置人还在
    				num_off++; //则报数
    				if (num_off == 3) {//否则当前的人即将要报的数字是3
    					*p = 0;  //则剔除这个人
    					num_off = 0; //并且重新开始计数,下边会++,所以是从1开始报数
    					remain--;//剩余人数-1
    				}
    			}
    			p++;
    		}
    	}
    	for (int i = 0; i < n; i++) {
    		if (people[i] != 0) {
    			printf("Serial number of the remaining person:%d
    ", people[i]);
    		}
    	}
    
    	printf("
    ");
    	system("pause");
    	return 0;
    }
    

    有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

  • 相关阅读:
    jPlayer
    nodemon
    微信
    防盗链
    ES2015 (ES6)
    静态资源
    WebP
    Retina
    ui-grid
    React入门2
  • 原文地址:https://www.cnblogs.com/weiyidedaan/p/13275353.html
Copyright © 2020-2023  润新知