今天看到一个程序时关于检查数组中重复出现的数字,我们很容易就会想到遍历,或者其他有关的算法计算,像现在和大家分享一下在这个办法,我刚开始真的很难想到为什么会用到这种办法,甚至第一时间看不懂
首先说办法,定义一个10个数组digit_seen[10],利用数组下标索引0-9进行检测,在第一次检测到数字时,先标记,第二次如果还检查到这个数字,跳出循环,直接打印重复。
具体的程序如下:
#include<stdbool.h>
#include <stdio.h>
int main()
{
bool digit_seen[10] = { false };
int digit;
long n;
printf("请输入数字");
scanf("%d", &n);
while (n > 0)
{
digit = n % 10;
if (digit_seen[digit])
break;
digit_seen[digit] = true;
n /=10;
}
if (n > 0)
printf("重复\n");
else
printf("没有重复\n");
return 0;
}
运行结果如下:
输入:12345678
输入:1236358
说明这个代码可以完成要求,能检查出数组的重复数字并打印,下面进行逐步调试,让大家更容易理解这个代码的实现过程
按F11逐步调试,输入数字为1236358,如图,n的值为1236358
接着:
3
6注意现在又到3:
技巧就在这里,因为第一次出现3后,把这个值赋值为ture,再根据判断,如果为ture,就break,退出while循环,打印重复!
下面再执行一个没有重复的供大家观察区别: