2015GPNU新生赛题解
今年的题目结合了往年的题目和华工,华师新生赛题目,确实是历年最难。
* 1001 *
Problem Description
最近ACM协会各种各样的费用都要申报,会长一时忙到手慌脚乱。身为会员的我们,一定要想个办法帮他们解决这个问题。现在有n 个项目的费用要申报,且给定每个项目的费用,求出总共要申请的费用。
Input
输入数据有多组,每组数据的第一行是一个整数n(0<=n<=40)代表申报的项目数,第二行有n个实数,每个实数代表每一个项目的费用
Output
对于每组数据,输出一行,代表所有项目的总费用(结果保留两位小数)
Sample Input
5
1 2 3 4 5
3
4 5 6
Sample Output
15.00
15.00
* 这一题就没什么好说的了。 *
#include<stdio.h>
int main()
{
//freopen ("1001input.txt", "r", stdin);
//freopen ("1001output.txt", "w", stdout);
int n,i;
double s,a[40];
while(scanf("%d",&n)!=EOF&&n>=0&&n<=40)
{
for(i=0;i<n;i++)
scanf("%lf",&a[i]);
for(s=0,i=0;i<n;i++)
s+=a[i];
printf("%.2f\n",s);
}
return 0;
}
* 2 *
题目略。。
代码如下:
#include<stdio.h>
int main()
{
//freopen ("1002input.txt", "r", stdin);
//freopen ("1002output.txt", "w", stdout);
int n,i,j;
while(scanf("%d",&n)!=EOF&&n>0&&n<40&&n%2!=0)
{
for(i=1;i<=n/2+1;i++)
{
for(j=1;j<=(n-(2*i-1))/2;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("*");
putchar('\n');
}
for(i=n/2;i>0;i--)
{
for(j=1;j<=(n-(2*i-1))/2;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("*");
putchar('\n');
}
}
return 0;
}
* 3 *
Problem Description
经过激烈的考试,班上的考试成绩终于出来了,但是这些成绩不是排好序的,现在班主任希望能够得到一份按成绩排序的成绩单,你能帮忙把这些杂乱的成绩单整理好顺序吗?考试成绩包括四项:语文、数学、英语、理综。排名规则是按照四科的总分进行排序,对于总分成绩相等的同学,就按理综成绩排名,若理综成绩也相等,按学号输出)
Input
有多组测试实例,每个实例的第一行输入整数n(1<=n<=100),代表成绩单上的人数。
接下来的n行,每行输入四个数据,分别代表该同学的语文、数学、英语、理综成绩。(学生的学号默认从1到n。)
Output
排好名次的成绩单(学号+语文+数学+英语+理综)每次输出一组数据后要空一行。
Sample Input
4
90 100 110 220
110 120 75 215
80 85 75 200
120 120 120 260
3
93 36 122 203
69 21 115 231
88 81 25 13
Sample Output
4 120 120 120 260
1 90 100 110 220
2 110 120 75 215
3 80 85 75 200
1 93 36 122 203
2 69 21 115 231
3 88 81 25 13
这一题主要考察排序。大家可以使用冒泡法排序,这里用快排来排序。
#include<stdio.h>
#include<stdlib.h>
#define MAX 1001
struct student
{
int num ;
int chinese , math , English , lizong ;
int sum ;
}stu[MAX] ;
int cmp( const void * a , const void * b )
{
struct student * a1 = (struct student *)a ;
struct student * b1 = (struct student *)b ;
if( a1->sum != b1->sum )
{
return b1->sum - a1->sum ; //降序排
}
else
{
if( a1->lizong != b1->lizong )
{
return b1->lizong - a1->lizong ; //降序排
}
else
return a1->num - b1->num ; //升序排
}
}
int main()
{