方法一:
暴力求解
#include<stdio.h>
int main(void){
int n,m,t1,t2,t3,t4,t,num; //t记录不同数字的个数
while(scanf("%d %d", &n, &m) != EOF){ //EOF是文件结束符
num=0;
while(1){
t=1;
t1=n/1000; //千位数
t2=n/100%10; //百位数
t3=n/10%10; //十位数
t4=n%10; //个位数
if(t1!=t2||t1!=t3||t1!=t4) //判定两个不同的数
t++;
if(t1!=t2&&t1!=t3&&t2!=t3||t2!=t3&&t2!=t4&&t3!=t4||t1!=t4&&t1!=t3&&t4!=t3||t1!=t2&&t1!=t4&&t2!=t4)
t++; //判定三个不同的数
if(t1!=t2&&t1!=t3&&t1!=t4&&t2!=t3&&t2!=t4&&t3!=t4)
t++; //判定四个不同的数
if(t==m) //如果符合提供的条件就跳出循环
break;
n++;
num++;
}
printf("%d %d%d%d%d\n", num, t1, t2, t3, t4);
}
}
方法二:
使用set不存在重复元素
#include<iostream>
#include<set>
using namespace std;
int main(){
int n,x;
cin>>n>>x;
for(int i=n;i<=3200;i++){
set<int> s;
int num=i;
for(int j=0;j<4;j++){
s.insert(num%10);
num=num/10;
}
if(s.size() ==x){
printf("%d %04d\n",i-n,i);
break;
}
}
return 0;
}