```cpp
#include<cstdio>
#define ll long long
using namespace std;
ll n,awa,i,a[1001],b[1001],f[1001];
void dfs(ll x,ll k)
{
f[k]=x;
if(k==n)
{
for(ll j=1;j<=n;j++)
printf("%lld ",f[j]);
awa=1; return ;
}
if(awa==1) return ;
for(ll j=1;j<=n;j++)
if((a[j]==x*2||a[j]*3==x)&&!b[j])
{
b[j]=1;
dfs(a[j],k+1);
b[j]=0;
}
return ;
}
int main()
{
scanf("%lld",&n);
for(i=1;i<=n;i++) scanf("%lld",&a[i]);
for(i=1;i<=n&&!awa;i++) b[i]=1,dfs(a[i],1),b[i]=0;
return 0;
}
```
by wjy2006 @ 2019-09-13 20:16:38
@[Bilion_冰凌帅](/space/show?uid=54372) (slay-dalao)
by wjy2006 @ 2019-09-13 20:17:03
@[Bilion_冰凌帅](/space/show?uid=54372) 您复制一遍我的程序是什么意思qwp
还有我是slay-juruo
by A_Đark_Horcrux @ 2019-09-13 20:21:14
```
#include<cstdio>
#define ll long long
using namespace std;
ll n,awa,i,a[1001],b[1001],f[1001];
void dfs(ll x,ll k)
{
f[k]=x;
if(k==n)
{
for(ll j=1;j<=n;j++)
printf("%lld ",f[j]);
awa=1; return ;
}
if(awa==1) return ;
for(ll j=1;j<=n;j++)
if((a[j]==x*2||a[j]*3==x)&&!b[j])//here
{
b[j]=1;
dfs(a[j],k+1);
b[j]=0;
}
return ;
}
int main()
{
scanf("%lld",&n);
for(i=1;i<=n;i++) scanf("%lld",&a[i]);
for(i=1;i<=n&&!awa;i++) b[i]=1,dfs(a[i],1),b[i]=0;
return 0;
}
```
by wjy2006 @ 2019-09-13 20:22:21
@[Bilion_冰凌帅](/space/show?uid=54372) 你要首先判断是否是2或3 的倍数QWQ
by 梧桐灯 @ 2019-09-13 20:22:24
把a[j]==x/3改成a[j]*3==x
by wjy2006 @ 2019-09-13 20:22:52
@[wjy2006](/space/show?uid=140780) @[光随影走](/space/show?uid=31193) 啊谢谢qwq
by A_Đark_Horcrux @ 2019-09-13 20:27:10
这题有没有人和我一样写哈希过的?
by IceNagisa @ 2021-08-12 11:47:34