判断一个数的各个数位是否有重复的数字


思想 利用数组 int Arr[10]={0};

然后用待判断的数字a 依次对10取余(再除以10) 得到各个数位的数,并且让Arr[a%10]=1; 并且判断是否出现Arr[a%10]==1,如果出现的话则有重复数字。

以下是c语言代码:

int RepetitionNum(int a)
{
int Arr[10]={0};
while(a!=0)
{
if(Arr[a%10]==1) return 0;
else Arr[a%10]=1;
a=a/10;
}
return 1;
}

//案例 a=98231  返回1 ;a=98233 返回0

除此之外,若要判断两个数的数字位数是否有相同的代码:

int Repe2(int a,int b)
{ int Arr[10]={0};
while(a!=0)
{
Arr[a%10]=1;
a=a/10;
}
while(b!=0)
{
if(Arr[b%10]==1) return 0;
b=b/10;
}
return 1;
}

//案例 a=232 b=91 返回1;a=231,b=91返回0;

在上面代码的基础上,若是其中a,b自身也不能有重复数字时(即a,b自身的各个数字不能重复,并且a,b也不能有重复数字)

int Repe3(int a,int b)//8372 7621
{
int Arr[10]={0};
while(a!=0&&b!=0)
{
if(Arr[a%10]==1) return 0;
else Arr[a%10]=1;
if(Arr[b%10]==1) return 0;
else Arr[b%10]=1;
a=a/10;
b=b/10;
}
while(a!=0)
{
if(Arr[a%10]==1) return 0;
else Arr[a%10]=1;
a=a/10;
}
while(b!=0)
{
if(Arr[b%10]==1) return 0;
else Arr[b%10]=1;
b=b/10;
}
return 1;
}

还有一种类型,对于a,b两个数,要求a里面的各个数字不能重复,b里面的各个数字不能和a重复(但对b本身没有要求)

下面是错误代码:典型案例是9387和4448  会输出1

int Repe4(int a,int b)
{
int Arr[10]={0};
while(a!=0&&b!=0)
{
if(Arr[a%10]==1) return 0;
else Arr[a%10]=1;
if(Arr[b%10]==1) return 0;
a=a/10;
b=b/10;
}
while(a!=0)
{
if(Arr[a%10]==1) return 0;
else Arr[a%10]=1;
a=a/10;
}
while(b!=0)
{
if(Arr[b%10]==1) return 0;
b=b/10;
}
return 1;
}

正确的做法是:

int check( int a, int b) 
{
int A[10]={0};
while(a!=0)
{
if(A[a%10]==1) return 0;
else A[a%10]=1;
a=a/10;
}
while(b!=0)
{
if(A[b%10]==1) return 0;
b=b/10;
}
return 1;
}

相关