题解 | #牛牛的10类人#

牛牛的10类人

https://www.nowcoder.com/practice/232b7fc32fac4636819e31a7d7c960a3

#include <stdio.h>

int main() 
{
    int n=0;
    scanf("%d",&n);
    int arr[n];
    //输入
    int i=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    //判断
    int m=0;
    int zero_num;
    int one_num;
    int j=0;
    int flag1,flag0;
    for(i=0;i<n;i++)
    {
        m=arr[i];
        one_num=zero_num=0;
        j=0;
        while(m>>j)   //这里用m>>j判断是否为0,为0则跳出(很巧妙)
        //注意这里不要觉得因为int只有32位,所以one_num+zero_num==32
        //但其实改题目不是这样,他只看为1的最高位,后面那几位
        //eg:5:0000 0000 0000 0000 0000 0000 0000 0101
        //只看101,1的个数为2,为偶数;0个数为1。其实是个1数(题目中的)
        //如果看32个bit位,0个数为32-2=30(偶数),就是个10数(题目中的)
        {
            if((m>>j)&1)
                one_num++;
            else
                zero_num++; 
            j++;
        }
        flag1=one_num%2;  //偶数的话flag就为0
        flag0=zero_num%2;
        if(!flag1 && !flag0)
        {
            arr[i]=10;
            continue;
        }
        if( !flag1)
            arr[i]=1;
        else if( !flag0)
            arr[i]=0;
        else
            arr[i]=100;
    }
    //输出
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务