题解 | #牛牛的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;
}


查看17道真题和解析