zoukankan      html  css  js  c++  java
  • 百度笔试题:找最小的不重复数

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

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

    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

  • 相关阅读:
    css3-13 如何改变文本框的轮廓颜色
    css3-13 css3的3D动画如何实现
    poj 2565 Ants (KM+思维)
    C语言功能 --C
    jQuery简要dom操作
    最近ubuntu 14.04 cpu高入住故障排除
    spring framework 4 源代码阅读器(1) --- 事前准备
    基于Haar特征Adaboost人脸检测级联分类
    ZOJ-3652-Maze(BFS)
    设计模式
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3459015.html
Copyright © 2011-2022 走看看