相关知识: strcmp(s1,s2)比较2个字符串的大小;
strcpy (s1,s2) 将s2复制给s1;
strncmp(s1,s2,开始,结束)比较这个长度下的字符串。
char s[N][N] scanf("%s",s[i]) s[i][j] 表示第 i 个字符串的 第j个元素;
应用 :
本题 贪心+此知识
给出N个正整数,连接生成一个“大”的整数,求这个生成的大整数的最大值。
例如,给出4个整数:123, 124, 56, 90,可以连接生成的大整数有:1231245690, 1241235690, 5612312490, 9012312456, 9056124123等等,对本例,总共可以生成24个大整数。而其实最大整数是:9056124123
输入
第1行:1 个整数N(1<=N<=50)
第2行:N个整数,每个整数不超过INT_MAX
输出
第1行:生成的最大整数
样例输入 Copy
4
123 124 56 90
样例输出 Copy
9056124123
#include <bits/stdc++.h> using namespace std; const int N= 100005; #define ri register int int n; char a[50][50],p[20],q[20],t[20]; int main(){ scanf("%d",&n); for(ri i=0;i<n;i++) { scanf("%s",a[i]); } for(ri i=0;i<n;i++) for(ri j=i+1;j<n;j++) { int len1=strlen(a[i]),len2=strlen(a[j]); strcpy(q,a[i]); for(ri k=0;k<len2;k++) q[k+len1]=a[j][k]; strcpy(p,a[j]); for(ri k=0;k<len1;k++) p[k+len2]=a[i][k]; if(strcmp(q,p)<0) { strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[j],t); } } for(ri i=0;i<n;i++) printf("%s",a[i]); }