60分求助大佬orz
查看原帖
60分求助大佬orz
823725
EZAIJ楼主2023/3/25 16:27

测试点1,2,4,5没过,大佬带带!!

#include<bits/stdc++.h>
using namespace std;

int a,b,c,cnt[10],t[3],backup[10],flag;
double ans[3];

int check(double y)
{
	if(y!=(int)y) return 0;
	int x=(int)y;
	for(int i=0;i<3;i++)
	{
		if(backup[x%10]||!(x%10)) return 0;
		backup[x%10]=1;
		x/=10;
	}
	if(x) return 0;
	return 1;
}

void dfs(int num)
{
	if(num==3)
	{
		memset(ans,0,sizeof(ans));
		for(int i=0;i<3;i++)
			ans[0]=ans[0]*10+t[i];
		ans[1]=ans[0]*b/a;
		ans[2]=ans[1]*c/b;
		memcpy(backup,cnt,sizeof(cnt));
		if(check(ans[1])&&check(ans[2])&&ans[1]<ans[2]&&ans[0]<ans[1])
		{
			flag=1;
			for(int i=0;i<3;i++)
				printf("%.0lf ",ans[i]);
			puts("");
		}
		return;
	}
/*	t[0]=1,t[1]=9,t[2]=2;
	dfs(3);*/
	for(int i=1;i<=9;i++)
	{
		if(!cnt[i])
		{
			t[num]=i;
			cnt[i]=1;
			dfs(num+1);
			cnt[i]=0;
		}	
	}
}

int main()
{
	scanf("%d%d%d",&a,&b,&c);
	dfs(0);
	if(!flag) printf("NO!!!");
	return 0;
}
2023/3/25 16:27
加载中...