UVA 10905 - Children's Game

这道题是要我们将给的数字进行接龙成一个很长的数字,然后找出其中最大的数字。所以排序不是

比较两个数字的大小,而是比较两个数字按照前后顺序接龙获得的数字的大小,因为数字可能很大

所以用数组,借助strcmp函数来排序。最后再将排序后的数组输出。这次熟悉了下strcat函数,看

来蛮好用。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char num[55][100];

int n;
void init()
{
for( int i = 0; i < n; i ++)
scanf( "%s", num[i]);
}

void output()
{
for( int i = 0; i < n; i ++)
printf( "%s", num[i]);
printf("\n");
}


int cmp( const void *_p, const void *_q)
{
char s1[500], s2[500];
char *p = (char *)_p;
char *q = (char *)_q;
strcpy( s1, p);
strcat( s1, q);
strcpy( s2, q);
strcat( s2, p);
return strcmp( s1, s2) < 0 ? 1 : -1;
}

int main()
{
while(true)
{
scanf( "%d", &n);
if( !n) break;
init();
qsort( num, n, sizeof(num[0]), cmp);
output();
}
return 0;
}


你可能感兴趣的:(children)