鱼C论坛

 找回密码
 立即注册
查看: 2891|回复: 9

[已解决]判断整数中是否有重复数字问题

[复制链接]
发表于 2022-7-21 20:35:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入一个不超过9位数的无符号整数,判断该整数中是否存在重复的数字
#include<stdio.h>
int main(){
        int i,num,n;
        int count[10]={0};
        printf("请输入一个正整数:");
        scanf("%d", &num);
        n=num;
        do{
                count[n%10]++;//统计数字n%10在整数n中出现的次数
                n=n/10;
        }while(n!=0);
        for(i=0;i<10;i++)
            if(count[i]>1)
                   break;
        if(i<10)
           printf("整数%d中存在重复的数字.\n", num);
        else
           printf("整数%d中没有重复的数字.\n", num);
        return 0;
}
想问下这个count[n%10]++;数组中n%10在数组中是什么意思,数组不是一个一个的存储嘛?然后++是指数组向下一个推,比如count[0]里是1,count[1]里是2,就是从1指向2?
for(i=0;i<10;i++)
            if(count[i]>1)
                   break;这里遍历的count[i]又是什么意思?count[1]里是2那也大于1啊
最佳答案
2022-7-23 14:49:34
n%10的目的是依次分离个位,十位,百位等数位中的数字,然后每看到一个数字x,count(x)就增加1,比如个位是1,count(1)就自增1,十位还是1,count(1)就再自增1变为2,等等。所以只要出现重复的数字,数组count[10]中必有一个元素大于1,然后最后的for循环就是判断是否有元素大于1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-21 21:19:24 | 显示全部楼层
n=786
n%10=6
count[n%10]就是count[6]
如果count[6]=2;count[6]++;
那么count[6]=3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-21 21:27:03 | 显示全部楼层
jhq999 发表于 2022-7-21 21:19
n=786
n%10=6
count[n%10]就是count[6]

比如n=6786,他是如何计算n中有重复数字的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-21 21:27:42 | 显示全部楼层
本帖最后由 jhq999 于 2022-7-21 21:40 编辑
#include<stdio.h>
int main(){
        char ch;
        int count[10]={0},num=0;
        printf("请输入一个正整数:");
        while((ch=getchar())>='0'&&ch<='9')
        {
                if(count[ch-='0'])count[0]=-1;
                count[ch]++;
                num=num*10+ch;
        }
        
        if(count[0]<0)
           printf("整数%d中存在重复的数字.\n", num);
        else
           printf("整数%d中没有重复的数字.\n", num);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-21 21:32:29 | 显示全部楼层
1163028233 发表于 2022-7-21 21:27
比如n=6786,他是如何计算n中有重复数字的?

n=6786;
count[n%10]++;\\count[6]++;count[6]=1;
///////////////
n=n/10=678;
count[n%10]++;\\count[8]++;count[8]=1;
……
n=6;
count[n%10]++;\\count[6]++;count[6]=2>1;

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-21 23:27:15 | 显示全部楼层
本帖最后由 桃花飞舞 于 2022-7-21 23:33 编辑

想问下这个count[n%10]++;数组中n%10在数组中是   % 是取余符号, n%10 求n的个位数的值  并不是给数组每一个元素都赋值,只给数组中重复出现的下标的值++,和 n = n / 10是一起看就懂了,数组不是一个一个的存储嘛?然后++是指数组向下一个推,比如count[0]里是1,count[1]里是2,就是从1指向2?int count[10]={0};  count[10]数组中的元素值都是0   count[n%10]++  意思就是只要数n中出现了的数字都作为count数组的下标就把下标对应的值加一,如果出现一次则下标对应的值是0+1 是1 ,出现重复的下标++后的值一定大于1
for(i=0;i<10;i++)
            if(count[i]>1)
                   break;这里遍历的count[i]又是什么意思?count[1]里是2那也大于1啊
这里遍历count[i],count[i]中的值也就是数字n中自然数0~9出现的次数,count[10]的初始值都是0,如果count[i]的值为0也就是说i对应的自然数没有出现过。遍历就是为了找出数组count[10]中,下标i对应的自然数出现重复的那个。
你也可以用别的方法来做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-23 14:49:34 | 显示全部楼层    本楼为最佳答案   
n%10的目的是依次分离个位,十位,百位等数位中的数字,然后每看到一个数字x,count(x)就增加1,比如个位是1,count(1)就自增1,十位还是1,count(1)就再自增1变为2,等等。所以只要出现重复的数字,数组count[10]中必有一个元素大于1,然后最后的for循环就是判断是否有元素大于1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-2 20:44:48 | 显示全部楼层
jhq999 发表于 2022-7-21 21:19
n=786
n%10=6
count[n%10]就是count[6]

意思是就是count[10]一开始都赋0,如果有重复的就会使得count中某一下标中的数大于1,所以后面才有循环当i>1则跳过,如果没重复的i一直加到10,所以i<10才会重复,如果i>=10那么就不会重复,这个程序是这样理解把?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-2 20:58:42 | 显示全部楼层
额外减小 发表于 2022-7-23 14:49
n%10的目的是依次分离个位,十位,百位等数位中的数字,然后每看到一个数字x,count(x)就增加1,比如个位是 ...

意思是就是count[10]一开始都赋0,如果有重复的就会使得count中某一下标中的数大于1,所以后面才有循环当i>1则跳过,如果没重复的i一直加到10,所以i<10才会重复,如果i>=10那么就不会重复,这个程序是这样理解把?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 00:12:34 | 显示全部楼层
1163028233 发表于 2022-8-2 20:58
意思是就是count[10]一开始都赋0,如果有重复的就会使得count中某一下标中的数大于1,所以后面才有循环当 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表