列表

详情


BC165. 牛牛的10类人

描述

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

输入描述

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

输出描述

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

示例1

输入:

2
1 10

输出:

0 10

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2022-07-21

#include<stdio.h>
#define N 2
int fun(int a)//十进制转二进制
{
    int i = 1, j = 0;
    int s=0;
    while (a!=0){
        j = a % N;
        a = a / N;
        s = s + j * i;
        i *= 10;
    }
    return s;
}
int main()
{
    int n;
    scanf("%d",&n);
    int a[10];
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        a[i]=fun(a[i]);
    }
    
    int i=0;
    for(i=0;i<n;i++){
    int c=0,o=0,s;
    while(a[i]!=0)
    {
        s=a[i]%10;
        if(s==1) c++;
        else o++;
        a[i]/=10;
    }
    c%=2;o%=2;
    int r=0;
    
        if(c==0&&o!=0) r=1;
        else if(o==0&&c!=0) r=0;
        else if(o==0&&c==0) r=10;
        else r=100;
        printf("%d ",r);
    }
    
}

C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2022-08-01

#include <stdio.h>
#include <math.h>

int convert(int a){
    int sum = 0;
    int i = 0;
    while(a != 0){
        sum += a%2*(int)pow(10,i);
        i++;
        a /= 2;
    }
    return sum;
}
int main(){
    int n;
    scanf("%d",&n);
    int b[n];
    int c[n];
    for(int i = 0;i<n;i++){
        scanf("%d",&b[i]);
    }
    for(int i = 0;i<n;i++){
        int temp = convert(b[i]);
        int count1 = 0;
        int count2 = 0;
        while(temp != 0){
            if(temp%10){
                count1++;
            }
            else{
                count2++;
            }
            temp /= 10;
        }
        if(count1%2 == 0){
            if(count1%2 == 0 && count2%2 == 0){
                c[i] = 10;
            }
            else{
                c[i] = 1;
            }
        }
        else if(count2%2 == 0){
            c[i] = 0;
        }
        else{
            c[i] = 100;
        }
    }
    for(int i = 0;i<n;i++){
        printf("%d ",c[i]);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2022-06-10

#include<stdio.h>
int main()
{
    int n,m[200];
    
    scanf("%d",&n);
    for(int i=0;i<n;i++)//1100
    {
        int o=0;
    int l=0;
       scanf("%d",&m[i]);
       int j=m[i];
        while(j)
        {
            if(j%2==1)
                l++;
            else
                o++;
            j/=2;
        }
    
         if(l%2==0&&o%2!=0)
        {
            printf("1 ");
        }
        else if(o%2==0&&l%2!=0)
        {
            printf("0 ");
        }
        else if(l%2!=0&&o%2!=0)
        {
            printf("100 ");
        }
        else if(l%2==0&&o%2==0)
        {
            printf("10 ");
        }
    }
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2022-06-06

#include<stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int arr[n];
    for (int i = 0; i < n; i++) {
        int l=0, o = 0;
        scanf("%d", &arr[i]);
        int val = arr[i];
        while (val) {
            if (val % 2 == 1) { //1010
                l++;
            } else {
                o++;
            }
            val = val / 2;
        }
        if ((l % 2 == 0) && (o % 2 != 0)) {
            printf("1 ");
        } else if  ((l % 2 != 0) && (o % 2 == 0)) {
            printf("0 ");
        }  else if (l % 2 == 0 && o % 2 == 0) 
            printf("10 ");
        else {
            printf("100 ");
        }
    }
    return 0;
}


C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2022-06-11

#include<stdio.h>
int main()
{
    int n,m[200];
    
    scanf("%d",&n);
    for(int i=0;i<n;i++)//1100
    {
        int o=0;
        int l=0; 
       scanf("%d",&m[i]);
       int j=m[i];
        while(j)
        {
            if(j%2==1)
                l++;
            else
                o++;
            j/=2;
        }
     
         if(l%2==0&&o%2!=0)
        {
            printf("1 ");
        }
        else if(o%2==0&&l%2!=0)
        {
            printf("0 ");
        }
        else if(l%2!=0&&o%2!=0)
        {
            printf("100 ");
        }
        else if(l%2==0&&o%2==0)
        {
            printf("10 ");
        }
    }
     
    return 0;
}

上一题