OR68. 数串
描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。输入描述
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。输出描述
每组数据输出一个表示最大的整数。示例1
输入:
2 12 123 4 7 13 4 246
输出:
12312 7424613
C++ 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2017-08-28
#include <iostream> #include <string> #include <vector> using namespace std; int main(){ int count; while(cin>>count){ vector<string> inputStrs; string curInputStr; for(int i = 0; i<count; ++i){ cin>>curInputStr; inputStrs.push_back(curInputStr); } for(int shift = 0; shift<inputStrs.size()-1; ++shift){ for(int index = 0; index<inputStrs.size()-1-shift; ++index){ if((inputStrs[index]+inputStrs[index+1])<(inputStrs[index+1]+inputStrs[index])){ swap(inputStrs[index],inputStrs[index+1]); } } } for(string str: inputStrs){ cout<<str; } cout<<endl; } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2018-08-05
#include <stdio.h> #include <string.h> int main() { int num; char buf[100][5]; char tmp1[10], tmp2[10], tmp[5]; scanf("%d", &num); getchar(); for (int i = 0; i < num; i++) { scanf("%s", buf[i]); } for (int i = 0; i < num; i++) { for (int j = i + 1; j < num ; j++) { strcpy(tmp1, buf[i]); strcat(tmp1, buf[j]); strcpy(tmp2, buf[j]); strcat(tmp2, buf[i]); if (strcmp(tmp1, tmp2) < 0) { strcpy(tmp, buf[i]); strcpy(buf[i], buf[j]); strcpy(buf[j], tmp); } } printf("%s", buf[i]); } }