标题:新手学C ,还请各位高人指点
只看楼主
Wx2019
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-8-30
 问题点数:0 回复次数:13 
新手学C ,还请各位高人指点
网上看到一段代码,有些地方不理解,输入一个整数,判断是否有重复的数字。如下
#include<stdio.h>
int main()
{int x,x1,t,a[10]={0};
   
    scanf("%d",&x);
 x1=x;
 for(;x;x/=10)
 {
 
     t=x%10;
     printf("a[10]的值是%d\n",a[10]);//这段是我加上的,当循环到最后这个值为什么就是1???
  if(a[t])
      {
         
          printf("%d中%d重复了\n",x1,t); return 0;}
    else a[t]=1;
  }
 printf("%d中没有重复的数字\n",x1);
 return 0;
}
搜索更多相关主题的帖子: return 重复 int printf 高人 
2019-08-30 19:08
c小白2333
Rank: 5Rank: 5
来 自:中国
等 级:贵宾
威 望:11
帖 子:121
专家分:367
注 册:2019-6-17
得分:0 
首先 你定义的a[10]里面有十个空间
从a[0]到a[9]  a[10]超出了
你的意思应该是这样的
程序代码:
    int x, x1, t;
    int a[10] = { 0 };
    scanf_s("%d", &x);
    x1 = x;
    for (; x; x /= 10)
    {
        t = x % 10;
        printf("a[%d]的值是%d\n", t, a[t]);
        if (a[t])
        {
            printf("%d中%d重复了\n", x1, t);
            return 0;
        }
        else 
            a[t] = 1;                            //当出现重复的数字  值为1  所以最后为1
    }
    printf("%d中没有重复的数字\n", x1);



[此贴子已经被作者于2019-8-30 20:02编辑过]


宝剑锋从磨砺出,梅花香自苦寒来。
2019-08-30 20:00
云不喜
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:16
注 册:2019-8-25
得分:0 
最后的值不一定要是1,只是用if(x)来判断的话,我们一般用1表示真即成立,0表示假即不成立。
楼主可以尝试把最后的1改为其它正数来检验。

[此贴子已经被作者于2019-8-30 23:25编辑过]


收获越多,动力越大!
2019-08-30 23:24
zhaoxd
Rank: 1
等 级:新手上路
威 望:1
帖 子:7
专家分:0
注 册:2019-8-30
得分:0 
这个程序输入1122,它判断不出来啊,结果是2重复了,输入2211,它判断是1重复了

学习学习
2019-08-31 10:47
Wx2019
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-8-30
得分:0 
回复 3楼 云不喜
你说的没有错,a[t]的值是真或者假,我的描述也不很清楚。
今天重新模拟了下,终于搞懂了,关键的点在 else a[t] = 1 这句,这个意思就是重新给a[t]赋值了,t的值在0--9中变化,
每次循环,都会给数组中的0--9个中的其中一个元素赋值1 ,当下一次循环,遇到是1的直接打印重复的数字了。
谢谢回复!!


2019-08-31 10:53
Wx2019
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-8-30
得分:0 
回复 2楼 c小白2333
t的值是变化的,最开始给数组a[10]全部赋值为0 ,所以第一次循环a[t],理论上会是0 ,就执行了else a[t] = 1这句,当下次循环时碰到t与上次相等时,if(a[t])这个就是1 ,为真,谢谢回复。
2019-08-31 10:59
Wx2019
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2019-8-30
得分:0 
回复 4楼 zhaoxd
没有错,这个程序如果遇到两个或者两个以上的重复数字,它就不灵了。现在在想如何修改让它判断任意整数。
2019-08-31 11:01
zhaoxd
Rank: 1
等 级:新手上路
威 望:1
帖 子:7
专家分:0
注 册:2019-8-30
得分:0 
/*
    改了一下,不过重复显示了。。。 哪位还知道怎么改。。
 */

#include<stdio.h>
int main()
{
    int x,x1,t,a[10]={0};
    int k= 0;
   
    scanf("%d",&x);
     x1=x;
     for(;x;x/=10)
    {
     
        t=x%10;
        //printf("a%d的值是%d\n", t, a[t]);//这段是我加上的,当循环到最后这个值为什么就是1???
        if(a[t])
        {   
            k++;
            printf("%d中%d重复了\n",x1,t);
            /*
            return 0;//加return0;表示:程序不再继续向下执行,包括后面的printf.和后面的return0;都表示 结束执行
            */
        }
        else
        {
            a[t]=1;
        }
    }
    if(k== 0)
    {
        printf("%d中没有重复的数字\n",x1);
    }
     
     return 0;
}

学习学习
2019-08-31 11:37
zhaoxd
Rank: 1
等 级:新手上路
威 望:1
帖 子:7
专家分:0
注 册:2019-8-30
得分:0 
/*
    这次不知道改的对不对。。。。
 */

#include<stdio.h>
int main()
{
    int x,x1,t,a[10]={0};
    int k= 0;
   
    scanf("%d",&x);
     x1=x;
     for(;x;x/=10)
    {
     
        t=x%10;
        //printf("a%d的值是%d\n", t, a[t]);//这段是我加上的,当循环到最后这个值为什么就是1???
        if(a[t])
        {   
            k++;
            if(a[t]< 2)
            {
                printf("%d中%d重复了\n",x1,t);
                a[t]++;
            }
            
            /*
            return 0;//加return0;表示:程序不再继续向下执行,包括后面的printf.和后面的return0;都表示 结束执行
            */
        }
        else
        {
            a[t]++;
        }
    }
    if(k== 0)
    {
        printf("%d中没有重复的数字\n",x1);
    }
     
     return 0;
}

学习学习
2019-08-31 12:07
jyxiasf
Rank: 2
等 级:论坛游民
威 望:1
帖 子:15
专家分:21
注 册:2019-9-3
得分:0 
#include<stdio.h>
int main()
{
    int x,x1,t,a[10]={0};
    int x2=1;
    scanf("%d",&x);
 x1=x;
  for(;x;x/=10)
 {
 
     t=x%10;
     a[t]=a[t]+1;
  }
  for(t=0;t<10;t++)
  {
  if(a[t]>1)
      {
         
          printf("%d中%d重复了%d 次\n",x1,t,a[t]);
          x2=2;
      }
  }
  
  if (x2=1)
     printf("%d中没有重复的数字\n",x1);
  return 0;
}
2019-09-03 17:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496641-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049255 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved