NOIP2010-普及组复赛模拟试题-第二题-数字积木

题目描述 Description

小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木
排成一排,所形成的数目最大是多少呢?
你的任务就是读入 n 个数字积木,求出所能形成的最大数。

输入输出格式 Input/output

输入格式:

第一行是一个整数 n (n≤1000),接下来 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("\n");
36     return 0;
37 }
时间: 2024-10-13 12:46:02

NOIP2010-普及组复赛模拟试题-第二题-数字积木的相关文章

NOIP2010-普及组复赛模拟试题-第一题-手机

题目背景 Background 现在手机使用越来越广泛了 题目描述 Description 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下.例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x.0 键按一下会出一个空格.你的任务是读取若干句只包含英文小写字母和空格的句子, 求出要在手机上打出这个句子至少需要按多少下键盘. 输入输出格式 Input/output 输入格式: 一行一个句子,只包含英文小写字母和空格,且不超过 200 个字符. 输出格式:一行一

NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军

题目背景 Background 一年两度的期末考要到来了!! 题目描述 Description 又要到考试了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍.由于复习紧张,他只记起了一部分,记忆的内容是正确的,可能不是按时间顺序排列的,记忆的内容可能有重复. 现在请求学过编程的你帮助Ljw,按时间顺序输出总冠军的球队(不能重复). (NBA从1947A.D到2009A.D) 输入输出格式 Input/output 输入格式:输入文件nba.in的第一行是一个整数

第二十四届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题

第二十四届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 1.原题呈现 2.试题答案 3.题目解析 因博客园无法打出公式等,所以给你们几个小编推荐的链接去看看,在这里小编深感抱歉! https://blog.csdn.net/Lu_Anlai/article/details/85490641 https://blog.csdn.net/Ronaldo7_ZYB/article/details/83098444 来源:CSDN 编辑:疯狂的杰克 原文地址:https://www.cnblo

noip2010普及组初赛

第十六届全国青少年信息学奥林匹克联赛初赛试题 ( 普及组 Pascal 语言 两小时完成) ●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●● 一. 单项选择题(共20题,每题1.5分,共计30分.每题有且仅有一个正确答案.) 1.2E+03表示(   ).A.2.03              B.5                 C.8                 D.2000 2.一个字节(byte)由(  )个二进制位组成.A.8                 B.

NOIP2016普及组复赛解题报告

提高组萌新,DAY1DAY2加起来骗分不到300,写写普及组的题目聊以自慰. (附:洛谷题目链接 T1:https://www.luogu.org/problem/show?pid=1909 T2:https://www.luogu.org/problem/show?pid=2010 T3:https://www.luogu.org/problem/show?pid=2058 T4:https://www.luogu.org/problem/show?pid=2119) 不得不说,亲历了14.1

C++ P1318 Jam的计数法(NOIP2006普及组复赛第3题)

#include<iostream>#include<cstdio>using namespace std; int s,t,w,a[30],time=5;char c[30];bool ok;//ok表示是否找到规定集合: void data_in()//使用位向量法: { scanf("%d%d%d",&s,&t,&w); scanf("%s",c); for(int i=0;i<w;i++) a[c[i]-

NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方

时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1写在第一行的中间.之后,按如下方式从小到大依次填写每个数(K= 2,3, … ,N∗N ): 1.若 (K−1)在第一行但不在最后一列,则将 填在最后一行,(K−1)所在列的右一列: 2.若 (K

NOIP2010普及组T3 接水问题 ——S.B.S.

题目描述 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的 供水量相等,均为 1. 现在有 n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从 1到 n 编号,i 号同学的接水量为 wi.接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水.当其中某名同学 j 完成其接水量要求 wj后,下一名排队等候接水的同学 k马上接替 j 同学的位置开始接水.这个换人的过程是瞬间完成的,且没有任何水的浪费.即j 同学第 x 秒结束时完成接水,则

NOIP2010普及组 三国游戏 -SilverN

1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 int d[510][510]; 7 int n; 8 int fst,snd,ans; 9 int main(){ 10 scanf("%d",&n); 11 int i,j,x; 12 for(i=1;i<n;i+