警示后人
查看原帖
警示后人
1312199
zhuyucheng6046楼主2025/1/26 19:27

注意特判0.

如果你(RE):

#include<bits/stdc++.h>
using namespace std;
int a,b,c;
int cnt[100];
bool check(int x)
{
	if(b*x%a!=0) return false;
	int y=b*x/a;
	if(c*y%b!=0) return false;
	int z=c*y/b;
	if(y<100||y>999) return false;
	if(z<100||z>999) return false;
	int x_=x,y_=y,z_=z;
	memset(cnt,0,sizeof(cnt));
	cnt[x%10]++;
	x/=10;
	cnt[y%10]++;
	y/=10;
	cnt[z%10]++;
	z/=10;
	cnt[x%10]++;
	x/=10;
	cnt[y%10]++;
	y/=10;
	cnt[z%10]++;
	z/=10;
	cnt[x%10]++;
	x/=10;
	cnt[y%10]++;
	y/=10;
	cnt[z%10]++;
	z/=10;
	for(int i=1;i<=9;i++){
		if(cnt[i]!=1)
		return false;
	}
	cout<<x_<<" "<<y_<<" "<<z_<<endl;
	return true;
}
int main()
{
	cin>>a>>b>>c;
	int win=0;
	for(int i=123; i<=987; i++) {
		if(check(i))
			win++;
	}
	if(win==0){
		cout<<"No!!!";
	}
	return 0;
}

因为在上述代码中,作为除数的ab不能为0,否则会RE。

AC Code:

#include<bits/stdc++.h>
using namespace std;
int a,b,c;
int cnt[100];
bool check(int x)
{
	if(a==0||b==0) return false;
	if(b*x%a!=0) return false;
	int y=b*x/a;
	if(c*y%b!=0) return false;
	int z=c*y/b;
	if(y<100||y>999) return false;
	if(z<100||z>999) return false;
	int x_=x,y_=y,z_=z;
	memset(cnt,0,sizeof(cnt));
	cnt[x%10]++;
	x/=10;
	cnt[y%10]++;
	y/=10;
	cnt[z%10]++;
	z/=10;
	cnt[x%10]++;
	x/=10;
	cnt[y%10]++;
	y/=10;
	cnt[z%10]++;
	z/=10;
	cnt[x%10]++;
	x/=10;
	cnt[y%10]++;
	y/=10;
	cnt[z%10]++;
	z/=10;
	for(int i=1;i<=9;i++){
		if(cnt[i]!=1)
		return false;
	}
	cout<<x_<<" "<<y_<<" "<<z_<<endl;
	return true;
}
int main()
{
	cin>>a>>b>>c;
	int win=0;
	for(int i=123; i<=987; i++) {
		if(check(i))
			win++;
	}
	if(win==0){
		cout<<"No!!!";
	}
	return 0;
}
2025/1/26 19:27
加载中...