题解 | #牛牛的10类人#

牛牛的10类人

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

描述

世界上有10类人,1类是懂二进制的,另一类的不懂二进制的。牛牛是第10种人,因此他是懂二进制的。
牛牛把二进制数分成两种,一种是 1 的数量是偶数的,牛牛称之为 1 数,一种是 0 的数量是偶数的,牛牛称之为 0 数,如果一个数同时是 1 数和 0 数,那称之为 10 数。

输入描述:

第一行输入一个正整数 n 表示数的个数
第二行输入 n 个正整数,表示每个输入的数字    

输出描述:

输出一行,对每个数字进行分类,即输出 0 或 1 或 10,如果既不是 0 类也不是 1 类则输出 100

示例1

输入:
2
1 10
输出:
0 10
解题思路:

按照题目要求写输入函数,然后逐一判断。
这里提供一个 通过按位与来判断整数二进制位的方法。

#include <stdio.h>
int func(int x)
{
    int temp=x;
    int count=temp&1;//统计1的个数 初始化为整数二进制末位(整数二进制如果末位是1 count初始化为1,反之为0)
    int tnuoc=count^1;//统计0的个数 count如果是1tnuoc就为0 反之为1
    while(temp >>= 1)
    {
        if(temp&1==1)
        {
            count++;
        }
        else
        {
            tnuoc++;
        }
    }
    if(count%2==0&&tnuoc%2==0)
    {
        return 10;
    }
    else if(count%2==0&&tnuoc%2!=0)
    {
        return 1;
    }
    else if(count%2!=0&&tnuoc%2==0)
    {
        return 0;
    }
    else
    {
        return 100;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    int arr[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(int i=0;i<n;i++)
    {
        int flag=func(arr[i]);
        switch(flag)
        {
            case 0:
                {
                    printf("0 ");
                    break;
                }
            case 1:
                {
                    printf("1 ");
                    break;
                }
            case 10:
                {
                    printf("10 ");
                    break;
                }
            default:
                {
                    printf("100 ");
                    break;
                }
        }
    }
    return 0;
}
全部评论

相关推荐

Dream_coding:你是不是只投大厂了
点赞 评论 收藏
分享
WindJerry:我三进宫也没做到 沟槽的字节 终究做不到啊
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务