题解 | #删数#

删数

http://www.nowcoder.com/practice/f9533a71aada4f35867008be22be5b6e

思路:如果是第1个数和第二个数,每次都将除第一个数外的其他数往前挪一位,第一个数挪到最后一位;

如果是第3个数(每次都删除了数,所以这个数现在也在第一位),那就将除第一位数外的其他数往前挪一位。

第一位处理:

0 1 2 3 4 5 6 7

1 2 3 4 5 6 7 0(记录第一位数0,除第一位数外其他数往前挪一位)

1 2 3 4 5 6 7 0(让最后一位等于刚刚记录的数)

第二位处理:

1 2 3 4 5 6 7 0

2 3 4 5 6 7 0 (记录第一位数1,除第一位数外其他数往前挪一位)

2 3 4 5 6 7 0 1(让最后一位等于刚刚记录的数)

第三位处理:

2 3 4 5 6 7 0 1

3 4 5 6 7 0 1 (=除第一位数外其他数往前挪一位)

    int n = 0;
    int num[1000] = {0};
    int i = 0;
    int length = 0;
    int count = 0;
    int k = 0;
    int j = 0;
    while(~scanf("%d", &n)){
        length = n;
        for(i = 0; i < n; i++){
            num[i] = i;
        }
        while(length > 1) {
            count++;
            k = num[0];
            for(j = 0; j < length-1; j++){
                num[j] = num[j+1];
            }
            if(count != 3){
                num[j] = k;
            }
            else{
                num[j] = 0;
                count = 0;
                length--;
            }
        }
        printf("%d\n", num[0]);
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
3 1 评论
分享
牛客网
牛客企业服务