好久没上洛谷了,今天上了发现蓝名了
言归正传,问个题:

代码:
#include<iostream>
using namespace std;
int n,k,d[11],qian,bai,shi,ge,x;
bool tmp;
int xunhuan(int a){
for(int i=1;i<=k;i++)
if(a==d[i])
a++,xunhuan(a);
return a;
}
void si(){
tmp=false;
qian=n/1000,bai=(n-qian*1000)/100,shi=(n-qian*1000-bai*100)/10,ge=n%10;
qian=xunhuan(qian),bai=xunhuan(bai),shi=xunhuan(shi),ge=xunhuan(ge);
printf("%d%d%d%d",qian,bai,shi,ge);
}
void san(){
tmp=false;
bai=n/100,shi=(n-bai*100)/10,ge=n%10;
bai=xunhuan(bai),shi=xunhuan(shi),ge=xunhuan(ge);
printf("%d%d%d",bai,shi,ge);
}
void er(){
tmp=false;
shi=n/10,ge=n%10;
shi=xunhuan(shi),ge=xunhuan(ge);
printf("%d%d",shi,ge);
}
void yi(){
tmp=false;
ge=n;
ge=xunhuan(ge);
printf("%d",ge);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++)
scanf("%d",&d[i]);
if(n>=1000)
si();
else if(n>=100)
san();
else if(n>=10)
er();
else
yi();
return 0;
}
我的思路是先区分n是四位数、三位数、两位数或者一位数,再求出各个位上的数,然后用递归循环,看每位有没有不喜欢的数,如果有就更改,最后输出
感觉思路是对的,不知道为啥错了(得了6分,满分10分)