zoukankan      html  css  js  c++  java
  • 洛谷-拼数-NOIP1998提高组复赛

    题目描述 Description

    设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
    例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
    又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
     输入输出格式 Input/output
    输入格式:
    第一行,一个正整数n。
    第二行,n个正整数。
    输出格式:
    一个正整数,表示最大的整数
     输入输出样例 Sample input/output
    样例测试点#1

    输入样例:

    3
    13
    131
    343

    输出样例:

    34313131

    说明 description

    30%的数据, n≤l0,每个数<10^3。 50%的数据, n≤l00。 100%的数据, n≤1000,每个数<10^200。

    思路:这题乍一看,wow,还蛮简单的哦。我当时的思路是:把这些数按顺序每个排一遍,比较一下大小,但这种方法实在很慢,几十个就爆了。

    但可以仔细观察下一下规律:要使一个数更大,首先要使首位尽量的大,并且要使一个数的位数尽量的大!

    太棒了,这就是正确的思路,怎么实现呢?这时,很快联想到,诶,这不是字符串的比较方法吗?!太棒了,就用字符串来解决!

    这题就演变成了简单的字符串二维数组排序,太棒了!

    代码如下:

     1 #include <stdio.h>
     2 #include <string.h>
     3 void sort(char array[][1001],int n)//排序函数
     4 {
     5     char temp[202];
     6     int i,j,k;
     7     for(i=0;i<n-1;i++)
     8     {
     9         k=i;
    10         for(j=i+1;j<n;j++)
    11             if(strcmp(array[k],array[j])<0)//大到小排序 
    12             k=j;
    13         if(k!=i)
    14         {
    15             strcpy(temp,array[i]);   //字符串交换顺序
    16             strcpy(array[i],array[k]);
    17             strcpy(array[k],temp);
    18         }
    19     }
    20 }
    21 int main()
    22 {
    23     int n,i;
    24     char str[1001][1001];
    25     scanf("%d",&n);
    26     for(i=0;i<n;i++)
    27     {
    28         scanf("%s",str[i]);//输入N个字符串
    29     }
    30     sort(str,n);//对输入的字符串排序
    31     for(i=0;i<n;i++)
    32     {
    33         printf("%s",str[i]);
    34     }
    35     printf("
    "); 
    36     return 0;
    37 }
  • 相关阅读:
    python增加 删除列表元素
    Fildder2
    Appscan使用第三方浏览器
    Appscan的下载安装
    http状态码
    python学习资料
    Fiddler抓包工具
    性能测试的一些资料
    Jmeter分布式测试
    内存溢出的原因及解决办法(转)
  • 原文地址:https://www.cnblogs.com/geek-007/p/5170716.html
Copyright © 2011-2022 走看看