5,530
社区成员
发帖
与我相关
我的任务
分享
#include <cstdio>
#include <cstring>
#include <bitset>
#include <iostream>
using namespace std;
#if 0
const int N = 4;
int cnt[N] = {4, 2, 5, 3};
const char* label = "abcd";
#else
const int N = 2;
int cnt[N] = {2, 2};
const char* label = "ab";
#endif
int temp[N];
int main()
{
for (int size = N; size >= 1; --size)
for (int mask = (1 << size) - 1; mask < 1 << N;)
{
int total = 1;
for (int i = 0; i < N; ++i)
if (mask & 1 << i)
{
temp[i] = total;
total *= cnt[i];
}
for (int id = 0; id < total; ++id)
{
for (int j = 0; j < N; ++j)
if (mask & 1 << j)
{
int v = id / temp[j] % cnt[j];
printf("%c%d ", label[j], v+1);
}
puts("");
}
const int x = mask & - mask, y = mask + x;
mask = ((mask & ~y) / x >> 1) | y;
}
return 0;
}