标题:查看输入数是否有重复数字
只看楼主
blacker50
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-11-21
结帖率:71.43%
已结贴  问题点数:18 回复次数:10 
查看输入数是否有重复数字
自己写了一个程序,是检查输入数字是否含重复数字的
eg:Enter a number: 123
No repeated digit
Enter a number: 222
Repeated digit
可是运行结果怪怪的,错了,不知道哪,能帮忙看看吗,谢谢!
#include<stdio.h>
#include<stdbool.h>
int main()
{
  bool a[10] = {false};
  int digit;
  long n;
  for(;;)
 {
  printf("Enter a number: ");
  scanf("%ld", &n);
  if(n <= 0)
  break;
  while(n > 0)
  {
   digit = n % 10;
   if(a[digit])
    break;
   a[digit] = true;
   n /= 10;
  }
   if(n > 0)
    printf("Repeated digit\n");
   else
    printf("No repeated digit\n");
 }
   return 0;
}
                             
搜索更多相关主题的帖子: repeated include number Enter false 
2014-01-17 17:18
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
得分:6 
试试这个:
用一个10个元素的数组表示数字0 ~9出现的次数, 首先初始化为0, 一个数出现两次就跳出.,
程序代码:
#include <stdio.h>

int main()
{
    int a[10], i;
    int x;

    while (scanf("%d", &x) == 1) {
        for (i = 0; i < 10; i++)    // 表示所有的数字都没有出现过
            a[i] = 0;
        while (x > 0) {
            if (++a[x%10] == 2) {     // 当一个数字出现时.数组元素+1,
                printf("Repeated digit\n");
                break;
            }
            x /= 10;
        } 
        if (x == 0)
            printf("No repeated digit\n");
    }
    return 0;
}

 
2014-01-17 17:34
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
得分:0 
你的代码是运行一次之后, a数组要重新初始化为false
2014-01-17 17:39
怪叔叔
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:1
帖 子:113
专家分:234
注 册:2013-9-22
得分:6 
#include<stdio.h>
int main()
{
    char a[50];
    int i = 1;
    int j = 0;
    int n, flag;
     printf("Enter a number: ");
    scanf("%d",&n);
    flag  = n%10;
    a[0] = flag;
    n /= 10;
    while(n)
    {
        i++;
        flag  = n%10;
        a[i] = flag;
        n /= 10;
    }
for(i; i >= 0; i--)
{
    for(j=i; j >= 0; j--)
    {
        if(i != j && a[i]==a[j])
        {
            printf("repeated digit\n");
        }
    }
}
if(i == -1)
{
    printf("No repeated digit");
}
}
觉得这个思路简单些
2014-01-17 23:32
blacker50
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-11-21
得分:0 
回复 2楼 pangshch
就是这个问题,谢谢啊
2014-01-18 10:16
blacker50
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-11-21
得分:0 
回复 3楼 pangshch
哦,谢啦,我知道你的思路了,可是有个问题,就是如果输入一个具有重复数字的数字,for语句嵌套里的if语句会循环执行,我觉得可以加个退出条件
for(i; i >= 0; i--)
{
    for(j=i; j >= 0; j--)
    {
        if(i != j && a[i]==a[j])
        {
            printf("repeated digit\n");
            goto done;
        }
    }
}
done:
if(i == -1)
{
    printf("No repeated digit");
}
}

2014-01-18 10:50
blacker50
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-11-21
得分:0 
回复 3楼 pangshch
我回复错了,

[ 本帖最后由 blacker50 于 2014-1-18 11:49 编辑 ]
2014-01-18 11:37
blacker50
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-11-21
得分:0 
回复 3楼 pangshch
是这个问题,谢谢啊
2014-01-18 11:48
blacker50
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-11-21
得分:0 
回复 4楼 怪叔叔
哦,谢啦,我知道你的思路了,可是有个问题,就是如果输入一个具有重复数字的数字,for语句嵌套里的if语句会循环执行,我觉得可以加个退出条件
for(i; i >= 0; i--)
{
    for(j=i; j >= 0; j--)
    {
        if(i != j && a[i]==a[j])
        {
            printf("repeated digit\n");
            goto done;
        }
    }
}
done:
if(i == -1)
{
    printf("No repeated digit");
}
}
另外,我回复错了。。。还有我想问为什么i开始不是初始化为0
2014-01-18 12:15
blacker50
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2013-11-21
得分:0 
回复 2楼 pangshch
我想问下while (scanf("%d", &x) == 1)是什么意思,不懂
2014-01-18 12:18



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




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

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