算法训练 筛选号码

思路:
定义一维数组, 数组下标表示人的编号, 值表示是否出局(1为出局), 先将数组元素全部初始化为0, 然后定义两个整型变量 num 表示人的编号和 count 其所报的数(i 在0~2循环, 0即表示报数为3,则出局),再定义一个整型变量left记录剩余人数, 剩余1人时退出循环。此人为胜者并输出其编号。

code:

#include <stdio.h>

int main(){
    int a[10000] = {0};
    int sum;  //总人数 
    int num, count, left;
    scanf("%d", &sum);
    left = sum;
    for(num=0,count=1; ; num=(num+1)%sum){
        if(a[num] == 1)  //若此人出局则继续找下一位未出局的人 
            continue;
        if(count==0){   //若此人报数为 0 则此人出局 
            a[num] = 1;
            left--;
            if(left == 1)
                break;
        }
        count=(count+1)%3;
    }
    for(num=0; num < sum; num++)  //在数组中找到唯一未出局的人 
        if(a[num]==0)break;
    printf("%d", num+1);
    return 0;
}

初学小白, 若有可改进之处欢迎评论

上一篇:更快的Maven构建工具mvnd和Gradle哪个性能更好?(5)


下一篇:一个memset函数使用时的坑