2015-2016中国石油大学期末A卷

问题 A: NBA助攻失误比

【题目描述】

在NBA(美国职业男篮)联盟中,后卫的助攻失误比是反映一名组织后卫效率的重要指标。助攻失误比越高,表示球员的传球稳定性越强、失误率越低。所谓助攻失误比,就是计算一位球员平均在几次助攻下会出现一次失误。由于从助攻失误比可轻易看出球员传球的稳定性及助攻的成功率,因此助攻失误比多用于评价控球后卫的素质。

助攻失误比=总助攻次数/总失误次数。

现在联盟打算统计一下所有组织后卫的助攻失误比数据。

【输入】

输入若干组数据,每组数据由两个正整数组成,分别代表一名后卫的助攻次数和失误次数。

【输出】

输出所有后卫数量以及所有后卫的助攻失误比的数值,保留小数点后1位数字。

【样例输入】

90 80
70 88
50 30

【样例输出】

3 1.1

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int a,b,n=0,x=0,y=0;
    
    while (scanf("%d%d",&a,&b)!=EOF)
    {
        x+=a;
        y+=b;
        n++;
    }
    
    printf("%d %.1lf",n,(double)x/y);
    return 0;
}

问题 B: 优良学风班

【题目描述】

《中国石油大学(华东)优良学风班评选办法》是面向全校所有全日制本科生班级,评选优良学风班需具备以下条件:

1.全班学生政治思想状况良好,拥护党的路线、方针、政策;

2.全班学生学习态度端正,学习目的明确,学习气氛浓厚;

3.全班学生遵守法纪,遵守《高等学校学生行为准则》和学校的各项规章制度;

4.班集体凝聚力强,开展集体活动效果良好;

5.全班学生学习效果显著:各门必修课程考试及格率大于等于95%,优良率大于等于60%,各种竞赛成绩和课外科技活动成果突出。

现在一个班有n名学生,以及某门课程的n个成绩,请你判断该门课程的成绩是否符合优良学风班的成绩要求。

【输入】

第一行一个整数n,接下来一行n个百分制的整数成绩。

【输出】

如果符合条件5输出Yes,否则输出No。

【样例输入】

10
91 92 97 85 72 94 82 62 84 84

【样例输出】

Yes

【提示】

优良指的是分数大于等于80分。

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int n;
    int a[50];
    
    scanf("%d",&n);
    
    for (int i=0; i<n; i++)
        scanf("%d",&a[i]);

    
    int pass=0,great=0;
    
    for (int i=0; i<n; i++) { if (a[i]>=60)
            pass++;
        if (a[i]>=80)
            great++;
    }
    
    if ((double)great/n>=0.6&&(double)pass/n>=0.95)
        printf("Yes");
    else
        printf("No");
    
    return 0;
}

问题 C: 青岛迈入地铁时代

【题目描述】

青岛地铁3号线是青岛市首条地铁线路,2016年12月10日11时进入全线运营。对于地铁,青岛人民盼望了20多年。青岛地铁3号线北段列车,到处充溢着“海味”、青岛味。列车内饰是海洋生物主题的3D彩绘,堪称“移动的海底世界”。海龟、海豚、鲨鱼、水母等海洋生物都被彩绘到了车厢的侧壁、顶、厢底下。有趣的是,这些海洋生物还“说”起了青岛话。比如,一踏进车厢,海龟会告诉你:“有地铁,太恣啦”;车门上的水母则提醒你:“长时间乘车,多活动波罗盖”、“车上人多,都白拥挤”;海豚也来凑热闹:“俺是青岛银”、“小嫚儿,真稀罕银”……

作为石油大学的一名大学生,小明也想去体验一下地铁为城市公共交通带来的便利。青岛地铁实行计程票制:

起步价2元,起步里程5公里;

5~10公里(含),票价为3元;

10~17公里(含),票价为4元;

17~27公里(含),票价为5元;

27~38公里(含),票价为6元;

超过38公里后,票价每增加1元,可多乘坐20公里。

【输入】

仅一行,一个整数,表示小明想乘坐的公里数。

【输出】

小明需要花多少钱。

【样例输入】

20

【样例输出】

5

【提示】

5~10公里表示大于5公里,小于等于10公里。

青岛地铁目前开通的线路始发站到终点站最长不超过38公里。

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int n;
    scanf("%d",&n);
    
    if (n<=5)
        printf("2");
    else if (n<=10)
        printf("3");
    else if (n<=17)
        printf("4");
    else if (n<=27)
        printf("5");
    else if (n<=38)
        printf("6");
    
    return 0;
}

问题 D: 苹果分级

【题目描述】

今年老王家的苹果丰收了,为了能卖个好价钱,老王把苹果按直径大小分等级出售。这么多苹果如何快速的分级,可愁坏了老王。现在请你编写一个程序来帮助老王模拟苹果分级的操作吧,要求一级果的直径大于等于70毫米,二级果的直径是69~60毫米,三级果的直径是59~50毫米,小于50毫米的算四级果。

【输入】

若干个整数,表示每个苹果的直径,当输入直径小于20时表示结束。苹果的直径最小为20,最大为120。

【输出】

输出有两行:第一行输出苹果总个数;第二行输出一级果、二级果、三级果、四级果的个数,中间用空格分隔,四级果后面无空格。

【样例输入】

67 34 85 58 32 54 59 60 55 42 51 0

【样例输出】

11
1 2 5 3

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int n,count=0;
    int one=0,two=0,three=0,four=0;
    
    while (1)
    {
        scanf("%d",&n);
        count++;
        
        if (n>=70)
            one++;
        else if (n>=60)
            two++;
        else if (n>=50)
            three++;
        else if (n>=20)
            four++;
        else
        {
            count--;
            break;
        }
        
    }
    
    printf("%d\n%d %d %d %d",count,one,two,three,four);
    
    return 0;
}

问题 E: 密码破译I

【题目描述】

公元前405年,雅典和斯巴达之间的伯罗奔尼撒战争已进入尾声。斯巴达军队逐渐占据了优势地位,准备对雅典发动最后一击。这时,原来站在斯巴达一边的波斯帝国突然改变态度,停止了对斯巴达的援助,意图使雅典和斯巴达在持续的战争中两败俱伤,以便从中渔利。在这种情况下,斯巴达急需摸清波斯帝国的具体行动计划,以便采取新的战略方针。正在这时,斯巴达军队捕获了一名从波斯帝国回雅典送信的雅典信使。斯巴达士兵仔细搜查这名信使,可搜查了好大一阵,除了从他身上搜出一条布满杂乱无章的希腊字母的普通腰带外,别无他获。情报究竟藏在什么地方呢?斯巴达军队统帅莱桑德把注意力集中到了那条腰带上,情报一定就在那些杂乱的字母之中。他反复琢磨研究这些天书似的文字,把腰带上的字母用各种方法重新排列组合,怎么也解不出来。最后,莱桑德失去了信心,他一边摆弄着那条腰带,一边思考着弄到情报的其他途径。当他无意中把腰带呈螺旋形缠绕在手中的剑鞘上时,奇迹出现了。原来腰带上那些杂乱无章的字母,竟组成了一段文字。这便是雅典间谍送回的一份情报,它告诉雅典,波斯军队准备在斯巴达军队发起最后攻击时,突然对斯巴达军队进行袭击。斯巴达军队根据这份情报马上改变了作战计划,并最终取得了战争的最后胜利。

现如今A国和B国也正在发生大战,B国为了获得胜利,派使者送密报给C国求助。天助A国,让A国抓住了这个使者并且获得了密报。但是当A国看到这段密码时全都傻了眼,他们看到的就是乱七八糟的数字。就在大家乱成一团的时候,一个聪明的大臣看了半天之后发现只需要把每五个数字加起来,结果对26取模,然后用0 对应a,1对应b...以此类推即可。

【输入】

第一行一个整数n,接下来n行,每行5个数字,取值区间为[0,1000],每个数字之间用空格分隔。

【输出】

输出最终破译的密码,每行一个小写字母。

【样例输入】

3
0 0 0 0 0
0 1 0 1 0
1 3 3 2 3

【样例输出】

a
c
m

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int n;
    scanf("%d",&n);
    
    while (n--)
    {
        int t,sum=0;
        for (int i=0; i<5; i++)
        {
            scanf("%d",&t);
            sum+=t;
        }
        
        sum=sum%26;
        int s;
        s=sum+97;
        
        printf("%c\n",s);
    }
    return 0;
}

问题 F: NBA三分球

【题目描述】

在NBA(美国职业男篮)联盟中,勇士队的球星库里现在是全联盟最炙手可热的得分手。他的三分球的投射能力令人惊叹,三分球命中数达到了场均4个。假设库里现在已经投中的三分球累积有M个,NBA目前最高的三分球记录是N个,那么库里至少还需要多少场比赛才能超过NBA的三分球记录。

【输入】

仅一行,两个正整数M,N(输入数据确保N>M)。

【输出】

一个整数,表示需要的场次。

【样例输入】

1000,2000

【样例输出】

251

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int m,n;
    scanf("%d,%d",&m,&n);
    
    int t;
    t=n-m;
    
    printf("%d",(t/4)+1);

    return 0;
}

问题 G: 你的QQ多少级了?

【题目描述】

QQ等级是2003年腾讯公司推出的QQ中的一种制度。最早是以小时来计算的,那段时间,绝大部分QQ用户都在挂QQ。随后就有不少媒体指责其浪费能源。在有关部门的介入下,腾讯公司将QQ等级变为以天为单位,每天只要在线两个小时就算一天。 半小时以上、两小时以下则记为半天。QQ等级最先开始的样子是星星,4个星星等于一个月亮,4个月亮等于一个太阳。4个太阳等于一个皇冠。(即:1个星星为1级,1个月亮为4级,1个太阳为16级,1个皇冠为64级。)一开始增加一个星星只用几天,到后面就要越来越多的天数来升级了。

用户可以在好友资料的浮出Tips显示中查看好友的在线等级,也可以在主面板自己头像的浮出Tips中查看自己的在线等级。用户到达每个等级需要的总天数可用如下的计算公式计算:

Days = Level * Level + Level * 4

现在你需要做的工作是根据给出的天数,计算用户的当前等级。

【输入】

输入仅一行,为一个非负整数Days,表示用户的活跃天数,输入数据在int表示的范围内。

【输出】

输出仅一行:一个整数表示用户的等级。

【样例输入】

867

【样例输出】

27

【参考代码】

#include <stdio.h>
#include <math.h>

int main(int argc, const char * argv[]) {
    int t;
    scanf("%d",&t);
    
    double x;
    x=sqrt(4+t)-2;
    
    printf("%d",(int)x);
    return 0;
}

问题 H: NBA季后赛对阵

【题目描述】

在NBA篮球季后赛比赛中,西部赛区已经决出了前四强的队伍,分别用编号1、2、3、4代表。这四支队伍将决出参加西部决赛的队伍,对阵的安排是1号对4号,2号对3号。比赛采用7局4胜制,假设两组比赛都已经各自进行了6场,结果都是3:3平。每组最后一场比赛的结果将决定最终的对阵(没有平局,每队得分都是正整数),两组中各自胜出的球队将参加最后的西部决赛。

【输入】

输入四个整数a,b,c,d,分别表示最后一场比赛1,2,3,4号队伍的得分。

【输出】

输出两个整数,表示参加决赛的队伍编号(1,4所在组胜出的编号在前,2,3所在组胜出的编号在后)。

【样例输入】

90 80 70 88

【样例输出】

1 VS 2

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    
    printf("%d VS ",(a>d?1:4));
    printf("%d\n",(b>c?2:3));
    
    return 0;
}

问题 I: 加油

【题目描述】

中国石油大学附近有三个加油站,中石化加油站(长江西路)A最近,中国鑫发石化加油站B较近,华鲁石化加油站C稍远。由于竞争关系,三个加油站的油价即使在同一天的同一时刻也会不一致。一天小明准备从学校开车去最便宜的加油站加油(能省则省嘛)。问小明去哪个加油站,最少花多少钱?

【输入】

仅一行,四个数。分别表示要加油数量(单位:升)以及A、B、C三个加油站当前时刻每升油的价格(单价:元)。

【输出】

仅一行,分别为加油站的名称和需要花费的钱数(精确到元)。

【样例输入】

30 5.5 5.4 5.45

【样例输出】

B 162

【参考代码】


#include <stdio.h>

int main(int argc, const char * argv[]) {
    double n,a,b,c;
    scanf("%lf%lf%lf%lf",&n,&a,&b,&c);
    
    double min=100;
    char flag;
    if (min>a)
    {
        min=a;
        flag='A';
    }
    
    if (min>b)
    {
        min=b;
        flag='B';
    }
    
    if (min>c)
    {
        min=c;
        flag='C';
    }
    
    
    printf("%c %.0lf",flag,min*n);

    return 0;
}

问题 J: 买牛奶

【题目描述】

凯文先生是个生活非常规律的人,一日三餐从不改变,喜欢喝“玉兰”牌的瓶装牛奶。凯文先生每餐都要喝半斤牛奶,而他喜欢的种类只有1斤装的,没喝完的会在下次进餐时继续喝。由于交通不方便,凯文先生会一次采购若干天的牛奶数量。问凯文先生一次至少买多少瓶?

【输入】

仅一行,一个正整数N(0<N<20),表示天数。

【输出】

仅一行,一次至少购买的牛奶瓶数。

【样例输入】

1

【样例输出】

2

【参考代码】

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int day;
    scanf("%d",&day);
    
    int milk;
    milk=day*3;
    
    if (milk%2!=0)
        printf("%d",milk/2+1);
    else
        printf("%d",milk/2);

    return 0;
}
分享