AcWing 1209. 带分数
原题链接
简单
C++ 代码 枚举法
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[10];//标记1~9出现次数
int flag[10];//暂存数组
int check(int n){//用作给a数组内容++,和判断是否不符合规则
while(n){
a[n%10]++;
n/=10;
}
if(a[0]!=0)//存在0 返回1
return 1;
for(int i=1;i<10;i++){//重复数字 返回1
if(a[i]>1) return 1;
}
return 0;
}
int checkall(){
for(int i=1;i<10;i++){
if(a[i]!=1) return 0;
}
return 1;
}
int main(){
int N,l,up,down,count=0;
cin >> N;
for(l=1;l<N;l++){
for(int i=0;i<10;i++) a[i]=0;//清零
if(check(l)) continue;//如果l不合理,则结束当前循环 例如11
for(int i=0;i<10;i++) flag[i]=a[i];//存放在flag数组中
for(down=1;down<100000;down++){
for(int i=0;i<10;i++) a[i]=flag[i];
up=(N-l)*down;
if(check(down) || check(up))
continue;
if(checkall()) count++;
}
}
cout<<count<<endl;
return 0;
}