各位大佬帮忙看看这道数字合并的题用c语言怎么写?
题目描述设有 n 个正整数,将它们连成一排,组成一个最大的多位数。例如:输入 n = 3 以及三个正整数 13, 312, 343, 则连成的最大数为 34331213
输入描述
第 1 行输入正整数个数 n, 下面 n 行输入 n 个整数,n 不大于 100, 每个正整数不超过 20 位
输出描述
一行,组成的最大整数,输入保证输出结果不超过 200 位
样例输入
4
7
13
4
246
样例输出
7424613 #include <stdio.h>
#include <string.h>
int comp(char s1[] , char s2[])
{
int i , m , r , n1 , n2 ;
n1 = strlen(s1) ;
n2 = strlen(s2) ;
m = (n1 < n2) ? n1 : n2 ;
for(i = 0 ; i < m && s1 == s2 ; i ++) ;
if(i == m) {
if(n1 == n2) r = 0 ;
else if(n1 < n2) r = comp(s1 , & s2) ;
else r = comp(& s1 , s2) ;
} else {
if(s1 > s2) r = 1 ;
else r = -1 ;
}
return r ;
}
int main(void)
{
int c , d , e , i , j , k , n ;
char s , r ;
scanf("%d" , & n) ;
fflush(stdin) ;
for(i = 0 ; i < n ; i ++) {
fgets(s , 24 , stdin) ;
s) - 1] = '\0' ;
d = i ;
}
for(i = 0 ; i < n - 1 ; i ++) {
for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s] , s]) > 0) k = j ;
e = d ;
d = d ;
d = e ;
}
for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s] ; j ++) r = s] ;
r = '\0' ;
printf("%s\n" , r) ;
} jackz007 发表于 2022-6-1 14:11
超时了{:5_100:}
本帖最后由 jackz007 于 2022-6-1 21:55 编辑
耀耀切克闹 发表于 2022-6-1 15:26
超时了
再试试这个代码
int comp(char s1[] , char s2[])
{
int c1 , c2 , i , m , n1 , n2 , r ;
char * p1 , * p2 ;
for(p1 = s1 , p2 = s2 ;;) {
n1 = strlen(p1) ;
n2 = strlen(p2) ;
c1 = (n1 < n2) ? n1 : n2 ;
c2 = (n1 > n2) ? n1 : n2 ;
for(i = 0 ; i < c1 && p1 == p2 ; i ++) ;
if(i < c1) {
if(p1 > p2) r = 1 ;
else r = -1 ;
break ;
} else {
if(c1 == c2) {
r = 0 ;
break ;
} else {
if(n1 > n2) p1 += c1 ;
else p2 += c1 ;
}
}
}
return r ;
}
int main(void)
{
int c , d , e , i , j , k , n ;
char s , r ;
scanf("%d" , & n) ;
fflush(stdin) ;
for(i = 0 ; i < n ; i ++) {
fgets(s , 24 , stdin) ;
s) - 1] = '\0' ;
d = i ;
}
for(i = 0 ; i < n - 1 ; i ++) {
for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s] , s]) > 0) k = j ;
e = d ;
d = d ;
d = e ;
}
for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s] ; j ++) r = s] ;
r = '\0' ;
printf("%s\n" , r) ;
} #include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare(const void* p, const void* q) {
const char* str1 = (const char*)p;
const char* str2 = (const char*)q;
return strcmp(str2, str1);
}
int main(void) {
int n;
scanf("%d", &n);
char nums, str;
for (int i = 0; i < n; ++i) {
scanf("%s", str);
strcpy(nums, str);
}
qsort(nums, n, sizeof(nums), compare);
for (int i = 0; i < n; ++i) printf("%s", nums);
return 0;
} 本帖最后由 jhq999 于 2022-6-2 06:31 编辑
#include <stdio.h>
#include <stdlib.h>
int strlen(char* str){
int i=0;
while(str);
return i;
}
int strcmp(char* str1,char* str2){
int i=0;
for(;str1&&str2;i++){
if(str1>str2)return 1;
else if(str1<str2)return -1;
}
if(!(str1||str2))return 0;
if('\0'==str1){
//for(;str2;i++);
if(str1>str2)return 1;
else return -1;
}
else {
//for(;str1;i++);
if(str2>str1[i)return -1;
else return 1;
}
}
int strsort(char** pstr,int n){
for(int i=0;i<n-1;i++){
for(int j=n-1;j>0;j--){
if(strcmp(pstr,pstr)<0){
char *tmp=pstr;
pstr=pstr;
pstr=tmp;
}
}
}
return 0;
}
void del0(char* str){
for(int i=0,j=0;str||str;i++,j++){
if('\0'==str)j++;
str=str;
}
}
int main(){
char str={0};
int n=0,start=0;
scanf("%d",&n);
char **pstr=(char**)malloc(sizeof(char*)*n);
int i=0;
for(i=0,start=0;i<n;i++){
scanf("%s",str+start);
pstr=str+start;
start+=strlen(str+start);
}
strsort(pstr,n);
for(i=0;i<n;i++)printf("%s",pstr);
free(pstr);
return 0;
}
页:
[1]