二进制枚举

150 阅读1分钟

题目:输入一个n,m,让你在0~ 9中找不同的n个数,相加等于m,问你有多少种可能。

例如:输入2 6,可以选择0+61+52+4,所以答案是3。

总共就十个数字。也就是1024种情况,暴力二进制枚举即可~

int main()
{
    int n, m;
    while (cin >> n >> m && n && m)
    {
        int ans = 0;
        for (int i = 0; i < (1 << 10); i++)
        {
            int sum_1 = 0, sum_2 = 0;
            for (int j = 0; j < 10; j++)
            {
                if (i & (1 << j))
                {
                    sum_1++;
                    sum_2 += j;
                }
            }
            if (sum_1 == n && sum_2 == m)
                ans++;
        }
        cout << ans << endl;
    }
    return 0;
}