题目:
https://www.luogu.com.cn/problem/UVA725(题目来源)
题目思路:
直接枚举fghij就行了,因为abcde可以用fghij*n来进行表示,就不用对0-9的所有排列进行枚举,降低了枚举量;当abcde或者fghij超过5位就可以结束; (输入和输出的要求我就不过多写了)
代码:
#include<bits/stdc++.h>
using namespace std;
bool jude(string temp){ //jude函数判断a~j为数字0~9的排列
for(int i=0;i<9;i++) {
if(temp[i]+1!=temp[i+1]){ // 判断是否为递增数
return false; //不是就false
}
}
return true;
}
int main(){
int n;
cin>>n;
int fghij=1000,abcde;
while(fghij<100000){
abcde=fghij*n; //abcde/fghij=n;
string a,b;
if(abcde>100000) break; //abcde超过5位结束枚举
b=to_string(abcde);
if(fghij<10000) a="0"+to_string(fghij); //fghij为4位的时候,意味着枚举前导零(0xxxx);
string c=a+b; //得到a和b的组合
sort(c.begin(),c.end()); //对c排序得到“0123456789 ”
if(jude(c)) cout<<b<<"/"<<a<<"="<<n<<endl; //打印结果
fghij++;
}
return 0;
}
输出结果:
(如果有疑问或者不对的地方,欢迎大家讨论 )