#include<stdio.h>
#include<math.h>
//函数havesamenum确认num是否满足条件
int havesamenum(int num)
{
int i=0,j;
char a[10] = {0};
while(num>0)
{
j=num%10;
printf("j=%6d\t",j);
a[j]+=1;
printf("a[j]=%6d\t",a[j]);
num=num/10;
printf("num=%6d\t\n",num);
//break;
}
while(a[i]<=1&&i<10)
i++;
if (i<10)
return 1;
else
return 0;
}
void main()
{
printf("\nwei 144 de shi hou:\n" );
havesamenum(144);
printf("\nwei 169 de shi hou:\n" );
havesamenum(169);
printf("\nwei 2116 de shi hou:\n" );
havesamenum(2116);
printf("\nwei 4761 de shi hou:\n" );
havesamenum(4761);
printf("\nwei 99225 de shi hou:\n" );
havesamenum(99225);
char b[10] = {0};
for (int i=0;i<=10;i++)
{
printf("b["+i+"]=0" );
}
}
/* 该题(主要考察对于一个int 数,不用分解字符穿的方法,找出其中不同位上的相同的数值)的思想是,对于一个数字,每次除以10
取余,可以依次从低位到高位去取得数值,
最开始时,定义一个元素全部为0的数组,以取得的数值为数组下标,对其进行+1运算;如果出现了相同的数值,则数组下标也回相同,
则又+1,从而通过对数组元素的判断,可以知道是否出现了相同的数值;
eg:676
0.初始化a[0]=0,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=0,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=0;
1.先取出个位上的6,则有a[6]=1;
2.再取出十位上的7,则有a[7]=1;
3.再取出百位上的6,则又要对a[6]加1.则a[6]=2;
4.通过检索数组元素,若有大于等于2的,则证明有相同的字符;
*/