战场原_黑仪 @ 2019-07-10 12:00:33
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,c;
bool fl[10]={0};
int num[4]={0};
int all=0;
void make(int x)
{
if(x>9)
{
if(1.0*num[1]/a==1.0*num[2]/b&&1.0*num[1]/a==num[3]/c)
printf("%d %d %d\n",num[1],num[2],num[3]);
all++;
return;
}
for(int i=1;i<=9;i++)
{
if(fl[i]==true)
continue;
if(x%3==1)
{
num[(x/3)+1]+=i;
fl[i]=true;
make(x+1);
fl[i]=false;
num[(x/3)+1]-=i;
}
if(x%3==2)
{
num[(x/3)+1]+=i*10;
fl[i]=true;
make(x+1);
fl[i]=false;
num[(x/3)+1]-=i*10;
}
if(x%3==0)
{
num[x/3]+=i*100;
fl[i]=true;
make(x+1);
fl[i]=false;
num[(x/3)]-=i*100;
}
}
}
int main()
{
cin>>a>>b>>c;
make(1);
if(all==0)
cout<<"No!!!";
return 0;
}
输“1 2 3”出
192 384 576
273 546 819
327 654 981
219 438 657
by 幻之陨梦 @ 2019-07-10 12:34:34
@Blackjack_A 不知道,但您可以深搜完之后在排列一下
by rui_er @ 2019-07-10 13:12:47
@Blackjack_A 不知道,能不能不要多次捞沉帖,霸占讨论页面
by Amor_Hucsy @ 2019-07-10 13:16:36
@Blackjack_A 大哥,第三遍了,求求您别再发了
by _H1kar1 @ 2019-07-10 13:39:48
三回啊,三回!
by 战场原_黑仪 @ 2019-07-10 14:08:50
第一次用讨论区,实在抱歉啊各位
by foxdemon @ 2019-07-10 14:57:31
@Blackjack_A 话说这道题不是模拟吗,干嘛dfs
by 战场原_黑仪 @ 2019-07-10 15:09:07
@foxdemon 之前另一个三连击我不是dfs的,时隔好几个月用一波dfs,结果。。
by 战场原_黑仪 @ 2019-07-10 15:16:14
@ZhanLang 再拍一遍的确能过,主要是这个深搜不按套路出牌有点蒙圈
by VTloBong @ 2019-07-17 17:38:36
你这个深搜不按套路出牌啊
本蒟蒻的dfsAC了......
看本蒟蒻的代码:
#include<stdio.h>
int a,b,c,num,book[10],t[10];
void dfs(int k) {
if(k==10) {
int x=t[1]*100+t[2]*10+t[3];
int y=t[4]*100+t[5]*10+t[6];
int z=t[7]*100+t[8]*10+t[9];
if((x*b*c==y*a*c)&&(x*b*c==z*a*b)){
printf("%d %d %d\n",x,y,z);
num++;
}
}else{
for(int i=1;i<=9;i++){
if(book[i]==0){
t[k]=i;
book[i]=1;
dfs(k+1);
book[i]=0;
}
}
}
}
int main(){
scanf("%d%d%d",&a,&b,&c);
dfs(1);
if(num==0)printf("No!!!");
return 0;
}