1 条题解

  • 0
    @ 2025-3-26 19:22:12

    1

    #include <bits/stdc++.h>
    using namespace std;
    int len, d[15];
    int cnt1(int x)
    {
        // 放在个位
        len = 1;
        d[len - 1] = x;
        // 进位
        while (d[len - 1] >= 2)
        {
            d[len] = d[len - 1] / 2;
            d[len - 1] %= 2;
            len++;
        }
        // 统计 1 的个数
        int cnt = 0;
        for (int i = 0; i <= len - 1; i++)
            if (d[i] == 1)
                cnt++;
        return cnt;
    }
    int cnt0(int x)
    {
        len = 1;
        d[len - 1] = x;
        while (d[len - 1] >= 2)
        {
            d[len] = d[len - 1] / 2;
            d[len - 1] %= 2;
            len++;
        }
        int cnt = 0;
        for (int i = 0; i <= len - 1; i++)
            if (d[i] == 0)
                cnt++;
        return cnt;
    }
    int main()
    {
        int n;
        cin >> n;
        int ansA = 0, ansB = 0;
        for (int i = 1; i <= n; i++)
        {
            if (cnt1(i) > cnt0(i))
                ansA++;
            else
                ansB++;
        }
        cout << ansA << " " << ansB << "\n";
    
        return 0;
    }
    

    2

    #include <bits/stdc++.h>
    using namespace std;
    int len, d[15];
    // 判断 x 在二进制下有几个 y
    int cnt(int x, int y)
    {
        len = 1;
        d[len - 1] = x;
        while (d[len - 1] >= 2)
        {
            d[len] = d[len - 1] / 2;
            d[len - 1] %= 2;
            len++;
        }
        int res = 0;
        for (int i = 0; i <= len - 1; i++)
            if (d[i] == y)
                res++;
        return res;
    }
    int main()
    {
        int n;
        cin >> n;
        int ansA = 0, ansB = 0;
        for (int i = 1; i <= n; i++)
        {
            if (cnt(i, 1) > cnt(i, 0))
                ansA++;
            else
                ansB++;
        }
        cout << ansA << " " << ansB << "\n";
    
        return 0;
    }
    

    3

    #include <bits/stdc++.h>
    using namespace std;
    // 判断 x 在二进制下有几个 y
    int cnt(int x, int y)
    {
        int res = 0;
        while (x > 0)
        {
            if (x % 2 == y)
                res++;
            x /= 2;
        }
        return res;
    }
    int main()
    {
        int n;
        cin >> n;
        int ansA = 0, ansB = 0;
        for (int i = 1; i <= n; i++)
        {
            if (cnt(i, 1) > cnt(i, 0))
                ansA++;
            else
                ansB++;
        }
        cout << ansA << " " << ansB << "\n";
    
        return 0;
    }
    
    • 1

    信息

    ID
    8741
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    21
    已通过
    11
    上传者