求比给定正整数N的最小不重复数(度娘)
来源:互联网 发布:淘宝里怎么发布宝贝 编辑:程序博客网 时间:2024/05/16 07:55
/************************************************************* * file:get_min_nonrepeat_num.c * brief:求比给定正整数N的最小“不重复数” * yejing@2015.1.24 1.0 creat *************************************************************/ #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> void swap(int* x, int* y){if(!x || !y)return;int tmp = *x;*x = *y;*y = tmp;return; } /* 求比给定正整数N的最小“不重复数”,不重复数指相邻两位的数字不重复。 求解算法思想:对于一个正整数N,从高位开始对对于第二个重复数加1,需考虑是否产生进位 之后如果仍然有重复数,做0101替换处理。因为高位已经加1,低位最小的非重复数只能是0101... 当然如果产生进位,因为要消除重复,进位只出现99的序列里,这降低了回溯的难度,单独处理即可 */ int get_min_nonrepeat_num(int n){int need_add_high_bit = 0;int len = 0;int tmp[128];int i = 0;int repeat_count = 0;char prev_bit = 0;//将整数n存到数组tmp中while(n){tmp[len++] = n%10;n = n/10;if(len > 128){printf("buffer is insufficent \n");return 0;}}//将数组顺序调转过来,直观些,比较便于理解while(i < len/2){swap(&tmp[i], &tmp[len - 1 - i]);i++;}for(i = 0; i < len; ++i){//找到一个重复if(prev_bit == tmp[i]){if(++repeat_count == 1){//第一个重复数做加1处理if(prev_bit == 9){//处理产生进位的情况if(i == 1)need_add_high_bit = 1;elsetmp[i - 2]++; tmp[i - 1] = 0;tmp[i] = 1;}else{++tmp[i];}}else{//if(i%2)tmp[i] = 1;elsetmp[i] = 0;}}else{repeat_count = 0;prev_bit = tmp[i];//update prev_bit}}if(need_add_high_bit)n = 1;elsen = 0;for(i = 0; i < len; ++i){n = n*10 + tmp[i];}return n; } int main(int argc, char** argv){int n = 999;printf("n = %d and the min_nonrepeat_num = %d \n", n, get_min_nonrepeat_num(n));return 1; }
0 0
- 求比给定正整数N的最小不重复数(度娘)
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 程序设计题--给定任意一个正整数,求比这个数大且最小的“不重复数
- (百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
- 给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 给定任意一个正整数,求比这个数大且最小的不重复数,“不重复数”的含义是相邻两位不同(java写的)
- 百度面试题 求比N大的最小“不重复数”
- 给定一个正整数n,找到比n小的完美平方数相加和等于n的最小数目。
- 算法:求比指定数大且最小的“不重复数”问题的高效实现
- [经典面试题][百度]求比指定数大且最小的“不重复数”
- 百度笔试:求大于n的最小的不重复数,不重复数是指相邻两个数不相同
- 求无序不重复正整数数列最小字串的长度
- 查找大于一正整数的最小的不重复数
- 求给定数的最大“不重复数”
- 给定正整数 N, 求使N < 2^m 成立的最小m(C语言版)
- jquery获取、改变元素属性值
- Sicily 1145 校门外的树
- Foundation框架(11)——NSNumber的使用
- 对涂胶工艺认识的误区:涂胶工艺应当能够满足所有材料表面的粘接
- Android遇到内存溢出(Out Of Memory)BUG的经验与解决方法
- 求比给定正整数N的最小不重复数(度娘)
- 人和人之间不要靠的太近
- 【技术教程】超强悍一键重装系统教程(小白必备)
- ios 面试
- Android自定义对话框(Dialog)位置,大小
- Pascal triangle 帕斯卡三角形 杨辉三角形 二项式定理
- Largest Rectangle in Histogram
- linux下使用C语言编写管理进程
- C++中const对象和const成员函数