/*
*兄弟数字分析:
给定一个数X,他的兄弟数Y定义为:是由X中的数字组合而成,并且
Y是大于X的数中最小的。例如:38276的兄弟数是38627.
给定X,求Y
*/
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
char str[10];
unsigned int get_brother_num(unsigned int x)
{
if(x<=100)
{
return -1;
}
memset(str,'\0',sizeof(str)/sizeof(char));
sprintf(str,"%d",x);
int sig=strlen(str);
int index=sig-2;
for(;index>=0;--index) //从右向左,查找到第一个非递增的数字
{
if(str[index]>=str[index+1])
continue;
break;
}
if(index>=0) //如果不是所有的数字都递增
{
for(int min_max=sig-1;min_max>index;--min_max) //用右侧最小的,且大于当前的第一个非递增的数字的数字,交换
{
if(str[index]<str[min_max])
{
swap(str[index],str[min_max]);
break;
}
}
++index;
--sig;
for(;index<sig;) //右侧,因为是有序的,逆序
{
swap(str[index],str[sig]);
++index;
--sig;
}
}
else //所有的数字都递增,说明没有兄弟数
{
return -1;
}
return atoi(str);
}
int main(int argc,char* argv[])
{
int a=34722641;
cout<<"a: "<<a<<endl;
a=get_brother_num(a);
cout<<"brother num: "<<a<<endl;
return 0;
}
兄弟数
最新推荐文章于 2020-05-13 14:52:31 发布