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,这样从头到尾遍历一遍整个数字就可以完成整个操作,执行效率高效!
有时间补上这个算法!或哪位高手贴出来也行!