题解 | Candy Sharing Game

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int N,i,insert,count,num;
    bool flag;
    
    while (scanf("%d",&N) != EOF) { 
        if(N==0){     //读到0直接跳过
            continue;
        }
        vector<int> candy;
        for(i=0;i<N;i++){
            scanf("%d",&insert);
            candy.push_back(insert);
        }
        if(N == 1){            //N为1时候不需要调整,count为0,不能进循环
            printf("%d %d\n",0,candy[0]);
            continue;
        }
        flag=true;
        count=0;
        while(flag){
            count++;
            vector<int> tmp_candy;   //新建一个数组保存减半后的数据,用于向右传递
            for(i=0;i<N;i++){
                tmp_candy.push_back(candy[i]/2);
                candy[i] -= tmp_candy[i];     //原本可能为奇数,需要减,不能简单折半
            }
            for(i=0;i<N;i++){
                candy[(i+1)%N] += tmp_candy[i];
                if(candy[(i+1)%N] % 2){   //奇数,得1
                    candy[(i+1)%N] ++;
                }
            }
            flag=false;
            for(i=1;i<N;i++){
                if(candy[i] != candy[0]){ //出现第一个不相等的就继续大循环while
                    flag=true;
                    break;
                }
            }
        }
        num = candy[0];
        printf("%d %d\n",count,num);
    }
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
02-05 17:33
制造业 Java 7k 本科其他
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务