博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
待字闺中之兄弟数字分析
阅读量:4652 次
发布时间:2019-06-09

本文共 1608 字,大约阅读时间需要 5 分钟。

给定一个数X,他的兄弟数Y定义为:是由X中的数字组合而成。而且Y是大于X的数中最小的。

比如,38276的兄弟数字为38627。给定X,求Y。

分析:这个题目当然有暴力的方法。列出全部的排列组合。然后然后找到大于X中,最小的Y。

即。找到兄弟数字。

那有没有更好的方法呢?不想对全部情况进行穷举。就要想办法,尽可能缩小要处理的范围。一般的思路,从右边開始,两两交换,查看能否够找到Y,最開始考虑两位,进而考虑三位,依次类推,那么怎样确定,要考虑多少位呢?如果X的形式例如以下:x1x2x3...xky1y2y3y4。而且当中y1>y2>y3>y4,xk<y1

以下以一个详细样例来说明上述过程:

3 4 7 2 2 6 4 1

首先找到,从右边開始的递增的、尽可能长的数位,这里是641。

3 4 7 2 2 (6 4 1)

则。选取前一位数字2。进行交换。641中。大于2的最小的值是4,则作例如以下交换:

3 4 7 2 4 (6 2 1)

为了得到最小值,对621,从小到大进行排序。得到

3 4 7 2 4 1 2 6

则。Y为34724126.对于负数的情况类似,仅仅是从后向前找第一个递增的位置。详细代码例如以下:

int brotheriPositiveNum(int num){	char src[20];	sprintf(src,"%d",num);//转换为字符串处理	int length = strlen(src);	int i = length -1,j;	for(;i > 0 && src[i] < src[i-1];i--);	if(i == 0)return num;//原数是全部组合中的最大值	for(j = length - 1;j > i && src[j] < src[i-1];j--);//找到第一个降序的位置	swap(src[i-1],src[j]);	sort(src+i,src+length);	int res = 0,MAX = numeric_limits
::max(); for(i = 0;i < length;i++) { if(MAX / 10 < res || (MAX / 10 == res && MAX % 10 < src[i]-'0'))return MAX;//溢出时返回最大正数 res = res * 10 + src[i] - '0'; } return res;}int brotheriNegativeNum(int num){ char src[20]; sprintf(src,"%d",num); int length = strlen(src); int i = length -1,j; for(;i > 0 && src[i] > src[i-1];i--); if(i == 0)return num;//原数是全部组合中的最小值 for(j = length - 1;j > i && src[j] < src[i-1];j--);//找到第一个生序的位置 swap(src[i-1],src[j]); sort(src+i,src+length); int res = 0; for(i = 0;i < length;i++) { res = res * 10 + src[i] - '0';//找最小值不会发生溢出 } return res;}int brotherNum(int num){ if(num >= 0)return brotheriPositiveNum(num); return -1*brotheriNegativeNum(-num);}

转载于:https://www.cnblogs.com/jzdwajue/p/6929119.html

你可能感兴趣的文章
AFore.NET 翻译
查看>>
[大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)
查看>>
What to do when the Chinese Characters are messed up when extracting from zip archive?
查看>>
SQLYog快捷键大全
查看>>
(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)
查看>>
隐藏Nginx或Apache以及PHP的版本号的方法
查看>>
N32926之jlink调试配置
查看>>
ASP.NET ACCESS 分页
查看>>
HashMap
查看>>
Android广播机制概述
查看>>
mysql触发器
查看>>
我是怎么让全国最大的儿童失踪预警平台流量掉底的
查看>>
领扣(LeetCode)二叉树的中序遍历 个人题解
查看>>
MySQL5.5登录密码忘记了,怎嘛办?
查看>>
[javascript]9宫格拖拽拼图游戏 puzzle
查看>>
论文笔记《Hand Gesture Recognition with 3D Convolutional Neural Networks》
查看>>
java内部类
查看>>
Entity Framework底层操作封装(3)
查看>>
python 全栈开发,Day37(操作系统的发展史)
查看>>
InputStream 转换 InputStreamReader再转换BufferedReader
查看>>