百度笔试题:找最小的不重复数

原创 2013年12月04日 19:21:59

版权所有。所有权利保留。

欢迎转载,转载时请注明出处:

http://blog.csdn.net/xiaofei_it/article/details/17123835

给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。

思路很简单:

1、把原数加1。

2、从高位开始找重复位。

3、将这位加1。

4、如果是10,此位变0,指针指向高位,转3。如果不是10,转5。

5、这位是否与高位相同,相同的话,转3。不同则转6。

6、把这位以后刷成01串。

其实本质就是贪心,把最高的重复位变掉,之后刷成01串,但变后可能又重复了,那么再变。

自己试试即可。

代码如下:

#include <iostream>
#include <cstring>
using namespace std;
#define MAX 100
int n[MAX],len;
void convert(string str)
{
	memset(n,0,sizeof(n));
	for (int i=0;i<str.length();i++)
		n[str.length()-1-i]=str[i]-'0';
	len=str.length();
}
void find()
{
	int i;
	n[0]++;
	for (i=0;n[i]==10;i++)
	{
		n[i]=0;
		n[i+1]++;
	}
	if (i==len) len++;
	bool yes=true;
	for (i=len-1;i>=1;i--)
		if (n[i]==n[i-1])
		{
			yes=false;break;
		}
	if (yes) return;
	n[--i]++;
	while (true)
	{
		while (n[i]==10)
		{
			n[i]=0;
			n[++i]++;
		}
		if (i==len)
			len++;
		if (n[i]==n[i+1])
			n[i]++;
		else
			break;
	}
	if (i==0) return;
	n[--i]=0;
	for (i--;i>=0;i--)
		n[i]=1-n[i+1];
}
int main()
{
	string str;
	while (cin>>str)
	{
		convert(str);
		find();
		for (int i=len-1;i>=0;i--) cout<<n[i];
		cout<<endl;
	}
	return 0;
}

输入样例:

121
19898989
989898989
989898
1989898
2199
120
0
2
21
20

输出样例:

123
20101010
1010101010
1010101
2010101
2301
121
1
3
23
21

百度笔试题----最小不重复数

给定一个任意数,找出比这个数大的最小不重复数(不重复数是指:这个数的相邻两位不同如:1231为不重复数,而1233为重复数)。 其实这个题目,看起来挺简单的,我只要从这个数开始一直向上找,总会找到吧。...
  • keep_moving_cqu
  • keep_moving_cqu
  • 2013年10月03日 01:14
  • 1850

百度笔试题----最小不重复数

百度笔试题----最小不重复数 分类: 算法2013-10-03 01:14 251人阅读 评论(0) 收藏 举报 给定一个任意数,找出比这个数大的最小不重复数(不重复数是指:这个...
  • pi9nc
  • pi9nc
  • 2013年10月03日 10:01
  • 1829

2015百度笔试题(软件)

一、简答题 1.请简述TCP-IP3次握手及4次挥手过程。并解释为何关闭连接需要4次挥手。(10分)...
  • tianya_team
  • tianya_team
  • 2016年02月22日 17:11
  • 787

网友汇总的IT笔试面试题

9月25日,小米大连站笔试题: 1一共有100万,抽中的2万,每月增加4万,问20个月能抽中的概率为:? 2 for(int i=0;i 3 手机wifi(A)….wifi ap….局域网(B)...
  • lzx_2011
  • lzx_2011
  • 2014年05月01日 01:37
  • 3569

阿里巴巴2013实习生笔试题一算法题详解

题目:有一个淘宝商户,在某城市有n个仓库,每个仓库的储货量不同,现在要通过货物运输,将每次仓库的储货量变成一致的,n个仓库之间的运输线路围城一个圈,即1->2->3->4->...->n->1->.....
  • zawdd
  • zawdd
  • 2013年06月01日 17:49
  • 1651

百度前端笔试题及答案

1、JavaScript包括哪些数据类型? 答案:我回答的是有两种:基本类型和对象,其中基本类型包括数字、字符串、布尔和null;对象(类似对象),包括数组、函数、内置对象、自定义对象。不过按理说字符...
  • xq2768637066
  • xq2768637066
  • 2016年01月29日 13:52
  • 3011

一份百度前端面试题:

在网上看见一份很不错的百度前端面试题,自己可以对前边知识做一个总结,也算是对自己知识的一个补充吧。当然文章是转载的,侵删!!      随着各大互联网公司设立了Web前端开发工程师、设计工程师等职...
  • nevercurtain
  • nevercurtain
  • 2016年12月24日 14:26
  • 1990

2016年腾讯校招笔试题(研发岗)

最近互联网笔试较频繁,也跟着师兄一起做了一些公司的笔试题,先将题记录下来吧,答案慢慢补。希望对自己明年找工作有帮助!首先上腾讯的笔试题,腾讯是我的梦想offer啊啊啊啊啊啊啊! 一、不定项选择题...
  • xiaoquantouer
  • xiaoquantouer
  • 2016年09月17日 15:38
  • 6760

百度2015校园招聘面试题回忆录(成功拿到offer)

百度面试题 一面(1 hour): 1.面试官从简历里抽了一个较感兴趣的项目,让把项目简单介绍了下,针对项目问了几个技术问题 2. 介绍Java中垃圾回收机制,程序员平时需要关注这个...
  • strongjava
  • strongjava
  • 2015年04月22日 07:05
  • 3429

华为:查找最大的不重复数

/* 查找最大的不重复数 l 问题描述 如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。 例如, 105 、 1234 和 12121 都是“不重复数”,而 11 、 100 和 ...
  • shihui512
  • shihui512
  • 2013年04月16日 20:40
  • 1688
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:百度笔试题:找最小的不重复数
举报原因:
原因补充:

(最多只允许输入30个字)