问题描述
如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。
例如, 105 、 1234 和 12121 都是“不重复数”,而 11 、 100 和
1225 不是。给定一个正整数 A ,返回大于 A 的最小“不重复数”。
A 小于 100000
要求实现函数
int GetNotRepeatNum(unsigned int Value)
【输入】 Value : 给定的数字,返回大于该值的最小不重复数
【输出】 无
【返回】大于 iValue 的最小不重复数
示例
输入: iValue =21099
返回: 21201
方法:将value中的每位数采用取余的方式存储到数组中,然后采用两层for循环遍历数组比较当前数字的左右两个数字是否和当前数字一样,若一样则让value值自加1,递归调用GetNotRepeatNum方法,直到value符合条件为止,输出即可。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int getnotrepeatnum(unsigned int value) {
int a[7] = { 0 };//默认存储为0
int i = 1, j, k;
int flag = 1;
unsigned int digit = value;
while (digit) {
a[i] = digit % 10;//从a[1]开始存储,方便比较a[1]的左边
digit /= 10;
i++;
}
for (j = 1; j < 6; j++) {
for (k = j - 1; k <= j + 1; k += 2) {//比较当前数字的左右两边的数字
if (a[j] == a[k]) {
flag = 0;//若为重复数则flag为0
break;
}
}
if (flag == 0) {//提前跳出循环
break;
}
}
return flag;
}
int main() {
unsigned int value;
scanf("%u", &value);
while (!getnotrepeatnum(value)) {//递归调用
value++;
}
printf("%u\n", value);
return 0;
}
运行代码截图:
如果该内容对你有帮助,请帮我点个小小的赞,谢谢。