标签:算法
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
这道题具有贪心选择性质和最优子结构性质,可以用贪心算法来解决。首先可以将n个正整数转化为字符串,然后根据a+b和b+a的大小进行排序。
#include <iostream> #include <stdlib.h> using namespace std; int n; string a[100]; string result = ""; int compare(string s1,string s2){ string ts1 = s1 + s2; string ts2 = s2 + s1; int num1 = atoi(ts1.c_str()); int num2 = atoi(ts2.c_str()); if(num1 > num2){ return 1; }else{ return -1; } } int main() { cin >> n; for(int i = 0;i < n;i ++){ cin >> a[i]; } for(int i = 0;i < n;i++){ for(int j = i + 1;j < n;j++){ if(compare(a[i],a[j]) < 0){ string tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } for(int i = 0;i < n;i++){ result += a[i]; } cout << result << endl; return 0; }
标签:算法
原文地址:http://blog.csdn.net/mangoer_ys/article/details/46637451