2015GPNU新生赛题解

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()
{
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值