33,010
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int v[] = {5,6,6,7,8,9};
int a[] = {0,1,2,3,4,5};
int c = 0;
do
{
int p[6];
for (int i = 0; i <6; i++)
{
p[a[i]] = i;
}
if (p[4] != 2 && abs(p[3] - p[5]) != 1 && p[1] < p[2])
{
printf("%3d:%d%d%d%d%d%d\n", ++c, v[a[0]], v[a[1]], v[a[2]], v[a[3]], v[a[4]], v[a[5]]);
}
}
while (next_permutation(a,a+6));
system("pause");
return 0;
}
.....
186:967865
187:985667
188:985676
189:985766
190:986567
191:986576
192:986657
193:986675
194:986756
195:986765
196:987566
197:987656
198:987665
代码:
#include <iostream>
#include <set>
using namespace std;
set<int> M;
void show(int *k, int n)
{
static int count = 0;
static const int value[6] = {5,6,6,7,8,9};
if (n >= 6)
{
bool OK = (k[2] != 4); // 8不在第三位
if (OK)
{
int k7,k9;
for (int i = 0; i < 6; i++)
{
if (k[i] == 3) k7 = i; // 7所在的位置
if (k[i] == 5) k9 = i; // 9所在的位置
}
OK = abs(k7 - k9) != 1;
if (OK)
{
int s = 0;
for (int i = 0; i < 6; i++)
{
s = s * 10 + value[k[i]];
}
if (M.insert(s).second)
{
printf("%5d:%d\n", ++count, s);
}
}
}
return;
}
for (k[n] = 0; k[n] < 6; k[n]++)
{
bool OK = true;
for (int i = 0; OK && i < n; i++)
{
OK = (k[i] != k[n]);
}
if (OK)
{
show(k, n+1);
}
}
}
int main()
{
int k[6];
show(k, 0);
system("pause");
return 0;
}