1 /*水题~~ 2 时间限制:1000 ms | 内存限制:65535 KB 3 难度:1 4 描述 5 输入一组正整数,每个正整数取值为【1,255】,你们懂得,刚好用8位二进制位可以表示。。。 6 你要做的就是:对于每个输入的正整数,如果她的二进制位有偶数个1,则该数满足要求,把符合要求的正整数的二进制位相加,并用二进制表示法输出。 7 你知道规律吗? 8 输入 9 有多组测试数据。 10 每组测试数据第一行输入N,表示有N个正整数,N<=255 11 第二行输入N个正整数,每个正整数取值为[1~255] 12 输出 13 输出所有满足要求的正整数的二进制表示法的和 14 样例输入 15 5 16 1 2 3 4 5 17 7 18 1 2 3 4 5 6 7 19 2 20 1 2 21 样例输出 22 1000 23 1110 24 0 25 提示 26 样例1:3的二进制为00000011,5的二进制为00000101,符合条件,故相加即得1110(忽略前面的零)。 27 上传者 28 TC_赵坤垚 29 */ 30 #include<stdio.h> 31 int main() 32 { 33 int n, i, a[260], sum; 34 while( scanf("%d",&n) != EOF) 35 { 36 int f(int x); 37 void g(int y); 38 sum=0; 39 for(i=0; i<n; i++) 40 scanf("%d",&a[i]); 41 for(i=0; i<n; i++) 42 if(f(a[i])) 43 sum+=a[i]; 44 g(sum); 45 } 46 return 0; 47 } 48 int f(int x) 49 { 50 int i=0; 51 while(x) 52 { 53 if(x%2 == 1) 54 i++; 55 x/=2; 56 } 57 if(i%2==0) 58 return 1; 59 else 60 return 0; 61 } 62 void g(int y) 63 { 64 int s[31],i,a; 65 for(i = 0; ; i++) 66 { 67 s[i] = y%2; 68 y /= 2; 69 if(y == 0) break; 70 } 71 for(a = i;a >= 0;a--) 72 printf("%d",s[a]); 73 printf("\n"); 74 }