算出大于一串数字的最小值,要求此数值的相邻两位不能相同
2010-10-17 02:31
666 查看
题目:算出大于一串数字的最小值,要求此数值的相邻两位不能相同。
#include <iostream>
#include <string>
using namespace std;
//补足最小数:01010101
void insertMin(string &sStr,string::iterator it)
{
int i=0;
for(;it!=sStr.end();it++)
{
*it='0' + i++%2;
}
}
//转换字符串
void ConvertNum(string &sStr)
{
for (string::iterator it = sStr.begin();it!=sStr.end();)
{
//如果是第一个字符
if(it==sStr.begin())
{
//如果第一个字符就是":",则直接补足最小数,例如:999+1,则第一位为'9'+1=':',得到010.
if(*it=='9'+1)
{
insertMin(sStr,it);
return;
}
it++;
continue;
}
//如果本位字符是":",则从本位开始补足最小值,迭代器前移一位,继续判断
if(*it=='9'+1)
{
insertMin(sStr,it);
if(it!=sStr.begin()) it--;
*it+=1;
continue;
}
//如果本位同前一位相同,则给本位加1,补足最小值,从本位开始继续转换。
if(*it==*(it-1))
{
*it+=1;
insertMin(sStr,it+1);
continue;
}
it++;
}
}
int main()
{
string str;
cout<<"输入三个零则退出!"<<endl;
while(cout<<"请输入字符串: ",cin>>str)
{
if(str=="000") break;
cout<<str;
string::reverse_iterator rit=str.rbegin();
*rit+=1;
ConvertNum(str);
cout<<"->"<<str<<endl<<endl;
}
return 0;
}
#include <iostream>
#include <string>
using namespace std;
//补足最小数:01010101
void insertMin(string &sStr,string::iterator it)
{
int i=0;
for(;it!=sStr.end();it++)
{
*it='0' + i++%2;
}
}
//转换字符串
void ConvertNum(string &sStr)
{
for (string::iterator it = sStr.begin();it!=sStr.end();)
{
//如果是第一个字符
if(it==sStr.begin())
{
//如果第一个字符就是":",则直接补足最小数,例如:999+1,则第一位为'9'+1=':',得到010.
if(*it=='9'+1)
{
insertMin(sStr,it);
return;
}
it++;
continue;
}
//如果本位字符是":",则从本位开始补足最小值,迭代器前移一位,继续判断
if(*it=='9'+1)
{
insertMin(sStr,it);
if(it!=sStr.begin()) it--;
*it+=1;
continue;
}
//如果本位同前一位相同,则给本位加1,补足最小值,从本位开始继续转换。
if(*it==*(it-1))
{
*it+=1;
insertMin(sStr,it+1);
continue;
}
it++;
}
}
int main()
{
string str;
cout<<"输入三个零则退出!"<<endl;
while(cout<<"请输入字符串: ",cin>>str)
{
if(str=="000") break;
cout<<str;
string::reverse_iterator rit=str.rbegin();
*rit+=1;
ConvertNum(str);
cout<<"->"<<str<<endl<<endl;
}
return 0;
}
相关文章推荐
- asp.net显示相同数字相乘的结果,直到数值大于150为止
- 6-3 判断满足条件的三位数 本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。
- 将[1,n^2]区间内n^2个数字分别填充到n*n的矩阵里,要求任意两个相邻的数字的和,它们的最大值最小是多少?
- 百度笔试:求大于n的最小的不重复数,不重复数是指相邻两个数不相同
- asp.net显示相同数字相乘的结果,直到数值大于150为止
- 显示相同数字相乘的结果,直到数值大于150为止
- 6-7 统计某类完全平方数(20 分) 本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
- 【codeforce Gym 100570B】【最短路SPFA】 ShortestPath Query 【询问单源最短路径,每条边有一个颜色,要求路径上相邻边的颜色不能相同】
- 题目:请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。用c语言编写(不能用数字转换成字符串)。
- 【POJ 1651】【区间DP 矩阵链乘的变形】Multiplication Puzzle【一串数字,除了头尾不能动,每次取个数字,它与左右相邻数字的乘积为其价值,求价值和最小】
- 输入一串字符,要求数字从小到大,字母从a到z排序,输出字母和数字的排序结果。
- 回文数字 观察数字:12321,123321都有一个共同的特征,无论从左到右读还是从右向左读;都是相同的。这样的数字叫做: 回文数字。 本题要求你找到一些5位或6位的十进制数字。满足要求: 该数字
- 求一个最小的一个大于N并且二进制权重与N相同的数
- 找出长度为n的所有数字,里面相邻数字不能一样 [No.53]
- 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号 ,只记下车号的一些特征。甲说:拍照前两位数字是相同的;乙说:拍照后两位数字 是相同的,但与前两位不同;丙是位数学家,他说
- 正则表达式:匹配6~16位字符(要求:不能出现空格,不能连续9位以下数字)
- hdu 3183 A Magic Lamp(给一个n位的数,从中删去m个数字,使得剩下的数字组成的数最小(顺序不能变),然后输出)
- 用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
- (c++)设圆半径r,圆柱高h 求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。 用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 PI=3
- 二叉排序树中,令f = (最大值+最小值) / 2,设计一个算法, 找出距离f值最近、大于f值的结点。复杂度不能为O(n2)。