题解(枚举)
2024-02-05 23:33:39
发布于:湖南
485阅读
0回复
0点赞
首先我们逐个枚举,将被除数设置为n * 除数,这样就不用便利两次
我们可以看到范围肯定在1000至99999之间,小于1000会出现两个0不成立
别超啊啊啊
#include <iostream>
#include <cstdio>
#include <windows.h>
using namespace std;
bool vis[10], flag;
bool check(int x){
if(x < 10000){//特判,如果有0
if(vis[0]) return 0;
vis[0] = 1;
}
while(x){
if(vis[x % 10]) return 0;//重复的return0
vis[x % 10] = 1;//记录下位数
x /= 10;
}return 1;
}
int main(){
int n;
cin >> n;
int j = 100000 / n;//不用遍历那么多次
for(int i = 1000; i <= j; i++){//逐个枚举,注意了必须小于1000
memset(vis, 0, sizeof(vis));//清零vis数组
if(check(i)){
int k = i * n;
if(check(k) && k <= 99999){//如果两个都符合条件,毫不犹豫,输出!!!
flag = 1;
cout << k << '/';
if(i < 10000) cout << 0;//注意前导0
cout << i << endl;
}
}
}if(!flag) cout << "No Answer.";
return 0;
}
全部评论 4
我只是开了防抄袭qwq,改改就能过 OK
2024-04-06 来自 北京
06
2024-04-06 来自 广东
0
DDJFNRFRJGNSKNVFVSKJ
2024-04-06 来自 北京
0我只是开了防抄袭qwq,改改就能过
2024-02-06 来自 湖南
06
2024-02-05 来自 湖南
0
有帮助,赞一个