P1618 三连击(升级版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:全排列,对比即可
代码:
#include<iostream>
using namespace std;
int b[10] = { 0 },a[20],A,B,C,A1,B1,C1,flag = 0;
void dfs(int m)//m从1开始,a[]从1开始
{
if (m > 9)
{
A1 = a[1] * 100 + a[2] * 10 + a[3];
B1 = a[4] * 100 + a[5] * 10 + a[6];
C1 = a[7] * 100 + a[8] * 10 + a[9];
if ((A1 * B == B1 && A1 * C == C1) || (A1 == A && B1 == B && C1 == C))
{
printf("%d %d %d\n", A1, B1, C1);
flag = 1;
}
}
for (int i = 1; i <= 9; i++)
{
if (!b[i])//i没用过
{
a[m] = i;
b[i] = 1;//标记
dfs(m + 1);
b[i] = 0;//回溯
}
}
}
int main()
{
cin >> A >> B >> C;
dfs(1);
if (!flag)
cout << "No!!!";
return 0;
}
总结:全排列