最近帮一个高中同学做其专升本的数据结构试卷,总体感觉比我们那会考试时难多了,其中最后一道算法设计题如下:
“请设计一个程序,其功能是:从键盘输入整数n及n个无符号数,将这n个无符号数连成一个最大的多位整数并输出之。例如,将5个无符号整数6750,67,34,345,7连成767675034534。”
第一次将题目看错,以为很简单,当然我基本上都是用C++写的,没有太考虑其中的数据结构(没办法c++用久了,有点不习惯c那种方式),仔细看发现,这个是要将一组数据进行某种方式的排序然后组合的,当然这里根本就没有考虑最大整数的实际意义,要不767675034534肯定会溢出了,想了会本来想用个类来包装每个输入的整数,然后比较每一位大小再组合的,后来发现似乎也不简单,主要是没有找到很有说服力的规律,google下发现这是一个南京师范大学非计算机专业本科生程序竞赛试题,寒啊,可惜那个网页打不开,在换了下关键词google,竟然在百度知道里面有个人问,下面两个回答,第一个和我想的差不多,第二个真是一语道天机啊,按照字符串大小排序,最近真是状态萎靡啊,下面是我写的一个小程序:
#include <sstream>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main(int argc, char* argv[])
{
cout<<”sizeof(unsigned int)=”<<sizeof(unsigned int)<<endl;
cout<<”UINT_MAX = “<<UINT_MAX<<endl;
int n;
cout<<”Please In put n:”<<endl;
cin >> n;
vector<string> vecStrInteger;
for (int i = 0 ; i< n ;++i)
{
cout<<”Please In put The “<<i+1<<”‘s unsigned integer:”;
unsigned int data;
cin >> data;
stringstream strStream;
strStream << data;
vecStrInteger.push_back(strStream.str());
}
sort(vecStrInteger.begin(),vecStrInteger.end(),greater<string>());
cout<<”The bigest integer is:”<<endl;
for (vector<string>::iterator iter = vecStrInteger.begin() ; iter != vecStrInteger.end() ; ++iter)
{
cout<<*iter;
}
cout<<endl;
return 0;
}
不知道这和数据结构有啥关联!!