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