#include
int main(){
int y,x,k;
int cnt=0;
int n;
scanf("%d %d",&y,&n);
k=y;
int a[4];
while(y>=1&&y<=3000){
a[0]=y/1000;
a[1]=y/100%10;
a[2]=y/10%10;
a[3]=y%10;
for(int i=0;i<3;i++){
for(int j=i+1;j<4;j++){
if(a[i]!=a[j])
cnt++;
}
}if(cnt==n){
x=y-k;
printf("%d %d",x,y);
break;
} y++;
}return 0;
}
算法不对:
1、a[j]会超出,j也要<3;
2、cnt的计算方法不对,你这样的算法,如果4个数不同,cnt=6,而不是4,3个数不同,cnt=5,2个数不同,cnt=4或者3;
3、cnt在循环内要清零,
4、你要计算不同数字的数量,4个数字全部相同,cnt值也应该为1,也就是初值为1;
参考程序
#include<stdio.h>
int main()
{
int y,x,k;
int cnt;
int i,j,n;
scanf("%d %d",&y,&n);
k=y;
int a[4];
while(y>=1&&y<=3000)
{
cnt=1;
a[0]=y/1000;
a[1]=y/100%10;
a[2]=y/10%10;
a[3]=y%10;
if(a[0]!=a[1])
{
cnt++;
}
if(a[0]!=a[2]&a[1]!=a[2])
{
cnt++;
}
if(a[0]!=a[3]&a[1]!=a[3]&a[2]!=a[3])
{
cnt++;
}
if(cnt==n)
{
x=y-k;
printf("年龄=%d 年份=%d",x,y);
break;
}
y++;
}
return 0;
}
#include<stdio.h>
int main()
{
int y,x,k;
int cnt=0;
int n;
scanf("%d %d",&y,&n);
k=y;
int a[4];
while(y>=1&&y<=3000){
a[0]=y/1000;
a[1]=y/100%10;
a[2]=y/10%10;
a[3]=y%10;
cnt = 0;
for(int i=0;i<3;i++)
{
for(int j=i+1;j<4;j++)
{
if(a[i]!=a[j])
cnt++;
}
}
if((cnt==6 && n==4) || (cnt==5 && n==3) || (cnt==3 && n==2) ||(cnt==0&&n==1))
{
x=y-k;
printf("%d %d",x,y);
break;
}
y++;
}
return 0;
}