给定一个数字,求比它大的最小的非重复数字

本文介绍了一道百度校园招聘的编程题,旨在找到输入整数后,比它大的最小的非重复数字的方法。提供了两种算法思路:一种是通过字符串比较逐位检查数字是否重复;另一种更高效的算法是从左到右遍历数字,遇到重复数字时递增前一位并清零后续位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2014 百度校园招聘笔试题-----编程第一题:

题目:整数中相邻的数字重复即为重复数字 如‘1101’,其他则为正常数字如‘1203’。    给定一个数字,求比它大的最小的非重复数字


/*
*   整数中相邻的数字重复即为重复数字 如‘1101’,其他则为正常数字如‘1203’
*    给定一个数字,求比它大的最小的非重复数字。
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int judge_num_nodup(int num);
void main()
{
	int num=0;	
	printf("please input a integer!\n");
	scanf("%d",&num);
	while(judge_num_nodup(num))
	{
		num++;		
	}
	printf("the Result is %d\n",num);
}
static int judge_num_nodup(int num)
{
	int i=0;
	int j=0;
	char numstr[64];
	sprintf(numstr, "%d", num); //将整数转换成字符串
	int numlen=strlen(numstr);
	for(i=0;i<numlen-1;i++)
	{
		j=i+1;
		if(numstr[i]==numstr[j])
		{	
			return 1;
		}
	}
	return 0;
}

该算法效率不高,可以有更好的算法:

                   将数字从头到尾遍历,遇到相同的数字,就将前面的数字加1并将后面的数字都置为0,这样从头到尾遍历一遍整个数字就可以完成整个操作,执行效率高效!

有时间补上这个算法!或哪位高手贴出来也行!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值