您的位置:首页 > 其它

求正整数数组构成的最小数(某公司2013年校园招聘笔试试题)

2013-09-16 21:52 330 查看
         题目是这样的:数组a的元素均为正整数,假设为:912, 345, 789, 那么形成的最小数为:345789912, 最大数为:912789345.请写出通用的求最小数的程序.

 

        很多人说:简单啊,不就是冒泡排序吗?大的往后放就可以了,是么?你看看这个数组:21, 2. 形成的最小数是212, 最大数是221, 可见,这样冒泡是不对的。还有很多人说,简单啊,用字符串比较啊,比较字符串的大小啊,那好,你写一下,看看好不好写。

 

       其实,本题还是应该用冒泡排序,只不过,要注意冒泡的方式和我们通常的冒泡方式有一定差异,程序如下:

#include <iostream>
using namespace std;

// a:123, b:45, 则函数返回整数12345
int link(int a, int b)
{
int t = b;
while(t)
{
a *= 10;
t /= 10;
}

return a + b;
}

void swap(int &x, int &y)
{
int t = x;
x = y;
y = t;
}

// 非常规冒泡排序
void leastNumber(int a[], int n, char *outStr)
{
int i, j;
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - 1 - i; j++)
{
if(link(a[j], a[j + 1]) > link(a[j + 1], a[j]))
{
swap(a[j], a[j + 1]);
}
}
}

char str[100] = {0};
for(i = 0; i < n; i++)
{
itoa(a[i], str, 10);
strcat(outStr, str);
}
}

int main()
{
int a[] = {9, 60, 21, 2, 356};
int n = 5;
char outStr[1000] = {0};
leastNumber(a, n, outStr);
cout << outStr << endl; // 结果是: 212356609

return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐