查找最大的不重复数

 问题描述
如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。
例如, 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;
}

运行代码截图:

如果该内容对你有帮助,请帮我点个小小的赞,谢谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪脱脱写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值