C语言pta编程题

目录

7-1 整数四则运算

7-2 求整数均值

7-4 输出菱形图案

7-5 计算存款利息

7-6 混合类型数据格式化输入

7-10 英文字母替换加密(大小写转换+后移1位)

7-11 整数算术运算

7-14 两小时学完C语言

7-1 N个数求和

7-2 A除以B

7-3 稳赢

7-4 装睡

7-5 统计学生平均成绩与及格人数

7-6 输出闰年

7-7 高速公路超速处罚

7-8 出租车计价

7-9 猜数字游戏

7-10 计算天数

7-11 分段计算居民水费

7-12 计算工资

7-13 两个数的简单计算器

7-14 念数字

7-15 单词长度

7-16 奇偶分家

7-17 编程团体赛

7-18 N个数求和

7-19 判断题

7-20 谁是赢家

7-21 整数的分类处理

7-22 判断一个三位数是否为水仙花数

7-23 找出三位水仙花数

7-24 胎压监测

 7-25 统计字符[2]

7-26 统计数字字符和空格

7-27 天梯赛的善良

7-28 判断素数

7-29 简单求阶乘问题

7-1 输出学生成绩

7-2 组织星期信息

7-3 利用指针返回多个函数值

7-1 输出学生成绩

7-2 矩阵转置

7-3 组织星期信息

7-4 利用指针返回多个函数值

7-1 求最大值及其下标

7-2 将数组中的数逆序存放

7-3 选择法排序

7-4 数字加密

7-5 交换最小值和最大值

7-6 求整数序列中出现次数最多的数

7-7 冒泡法排序

7-8 出生年

 7-9 点赞

7-10 判断题

7-11 乘法口诀数列

7-12 试试手气

 7-13 静静的推荐

7-1 字符串排序

7-2 输出学生成绩

7-3 A-B

7-4 计算阶乘和

7-5 谷歌的招聘

 7-1 输出学生成绩

7-2 平面向量加法

7-3 查找书籍

7-4 通讯录排序

7-5 有理数比较

7-1 组合数的和


7-1 整数四则运算

分数 300

全屏浏览题目

作者 乔林

单位 浙江大学

本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。

输入样例:

3 2

输出样例:

3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>

int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    if(a > 0 && b > 0 ){
        printf("%d + %d = %d\n",a,b,a+b);
        printf("%d - %d = %d\n",a,b,a-b);
        printf("%d * %d = %d\n",a,b,a*b);
        printf("%d / %d = %d\n",a,b,a/b);
    }
}

7-2 求整数均值

分数 300

全屏浏览题目

作者 乔林

单位 清华大学

本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。

输入格式:

输入在一行中给出4个整数,其间以空格分隔。

输出格式:

在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。

输入样例:

1 2 3 4

输出样例:

Sum = 10; Average = 2.5

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>

int main(){
    int a,b,c,d;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    
    int sum;
    sum = a+b+c+d;
    float aver;
    aver = (a+b+c+d)/4.0;
    
    if(a<0||b<0||c<0||d<0){
        aver = 0;
    }
        printf("Sum = %d; Average = %0.1f",sum,aver);
}

7-4 输出菱形图案

分数 300

全屏浏览题目

作者 张高燕

单位 浙大城市学院

本题要求编写程序,输出指定的由“A”组成的菱形图案。

输入格式:

本题无输入

输出格式:

按照下列格式输出由“A”组成的菱形图案。

  A
A   A
  A

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>

int main(){
    printf("  A\n");
    printf("A   A\n");
    printf("  A\n");
}

7-5 计算存款利息

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题目要求计算存款利息,计算公式为interest=money×(1+rate)year−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。

输入格式:

输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。

输出格式:

在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。

输入样例:

1000 3 0.025

输出样例:

interest = 76.89

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

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

int main(){
    double money,year,rate,interest;
    scanf("%lf %lf %lf\n",&money,&year,&rate);
    
    interest = money * pow(1+rate,year) - money;
    printf("interest = %0.2lf",interest);
}

7-6 混合类型数据格式化输入

分数 300

全屏浏览题目

作者 乔林

单位 清华大学

本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。

输入格式:

输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。

输出格式:

在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

输入样例:

2.12 88 c 4.7

输出样例:

c 88 2.12 4.70

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>

int main(){
    int b;
    double a,d;
    char c;
    scanf("%lf %d %c %lf",&a,&b,&c,&d);
    printf("%c %d %.2f %.2f",c,b,a,d);
}

7-10 英文字母替换加密(大小写转换+后移1位)

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题要求编写程序,将英文字母替换加密。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母。例如,字母a->B、b->C、…、z->A、A->b、B->c、…、Z->a。输入一行字符,将其中的英文字母按照以上规则转换后输出,其他字符按原样输出。

输入格式:

输入一行字符,以回车符 '\n'作为 结束符。

输出格式:

将输入的一行字符中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大写字母转换为小写字母后输出,其他字符按原样输出。

输入样例:

在这里给出一组输入。例如:

Reold  Z123?

输出样例:

在这里给出相应的输出。例如:

sFPME  a123?

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>

int main(){
    char c,delta;
    delta='A'-'a';
    do{
        scanf("%c",&c);
        if(c>='a'&&c<'z')c+=(delta+1);
        else if(c>='A'&&c<'Z')c-=(delta-1);
        else if(c=='Z')c='a';
        else if(c=='z')c='A';
        printf("%c",c);
    }while(c!='\n');
    return 0;
}

7-11 整数算术运算

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题要求编写程序,计算并输出2个正整数的和、差、积、商与余数。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在5行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商与余数。

输入样例:

5 3

输出样例:

在这里给出相应的输出。例如:

5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1
5 % 3 = 2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>

int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    if(a > 0 && b > 0 ){
        printf("%d + %d = %d\n",a,b,a+b);
        printf("%d - %d = %d\n",a,b,a-b);
        printf("%d * %d = %d\n",a,b,a*b);
        printf("%d / %d = %d\n",a,b,a/b);
        printf("%d %% %d = %d\n",a,b,a%b);
    }
}

7-14 两小时学完C语言

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

知乎上有个宝宝问:“两个小时内如何学完 C 语言?”当然,问的是“学完”并不是“学会”。

假设一本 C 语言教科书有 N 个字,这个宝宝每分钟能看 K 个字,看了 M 分钟。还剩多少字没有看?

输入格式:

输入在一行中给出 3 个正整数,分别是 N(不超过 400 000),教科书的总字数;K(不超过 3 000),是宝宝每分钟能看的字数;M(不超过 120),是宝宝看书的分钟数。

题目保证宝宝看完的字数不超过 N。

输出格式:

在一行中输出宝宝还没有看的字数。

输入样例:

100000 1000 72

输出样例:

28000

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>

int main(){
    int n,m,k,o;
    scanf("%d %d %d",&n,&k,&m);
    o = n-m*k;
    
    if (n < 0 || n>400000){
        return 0;
    }else{
        if (k < 0 || k>3000){
            return 0;
        }else{
            if (m < 0 || m>120){
                return 0;
            }else{
                printf("%d", o);
            }
        }
    }
}

7-1 N个数求和

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:

输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:

5
2/5 4/15 1/30 -2/60 8/3

输出样例1:

3 1/3

输入样例2:

2
4/3 2/3

输出样例2:

2

输入样例3:

3
1/3 -1/6 1/8

输出样例3:

7/24

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C++ (g++)

#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b)//求最大公约数。
{
	if (a == 0)
		return 0;
	else
		return (b == 0) ? a : gcd(b, a % b);
}
 
int main()
{
	int n;
	cin >> n;
	long long int a, b, c, d;
	scanf("%lld/%lld", &a, &b);
	long long int yue;
	yue = gcd(a, b);
	if (a != 0)
	{
		a = a / yue;
		b = b / yue;
	}
	for (int i = 1; i < n; i++)
	{
		scanf("%lld/%lld", &c, &d);
		yue = b / gcd(b, d)*d;
		a = a * yue / b + c * yue / d;
		b = yue;
		yue = gcd(a, b);
		if (yue != 0)
		{
			a = a / yue;
			b = b / yue;
		}
	}
	if (a && a / b == 0)
		printf("%lld/%lld\n", a%b, b);
	else if (a%b == 0)
		printf("%lld\n", a / b);
	else
		printf("%lld %lld/%lld\n", a / b, a%b, b);
	return 0;
}
 

7-2 A除以B

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。

输入格式:

输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。

输入样例1:

-1 2

输出样例1:

-1/2=-0.50

输入样例2:

1 -3

输出样例2:

1/(-3)=-0.33

输入样例3:

5 0

输出样例3:

5/0=Error

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    
    if(b == 0){
        printf("%d/%d=Error",a,b);
    }else{
        if(b < 0){
            printf("%d/(%d)=%.2f",a,b,1.0*a/b);
        }else{
            printf("%d/%d=%.2f",a,b,1.0*a/b);
        } 
    }
}

7-3 稳赢

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

输入格式:

输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。

输出格式:

对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

输入样例:

2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End

输出样例:

Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
#include <string.h>
int main()
{
    int k, count = 0;
    scanf("%d", &k);
    
    char str[10]  ;
    
    while (scanf("%s", str) != EOF)
    {
        count++;
        if (str[0] == 'C')
        {
            if (count > k)
            {
                count = 0;
                printf("%s\n", str);
            }
            else
                printf("Bu\n");
        }
        else if (str[0] == 'J')
        {
            if (count >k)
            {
                count = 0;
                printf("%s\n", str);
            }
            else
                printf("ChuiZi\n");
        }
        else if (str[0] == 'B')
        {
            if (count > k)
            {
                count = 0;
                printf("%s\n", str);
            }
            else
                printf("JianDao\n");
        }
        else if (str[0] == 'E')
            break;
    }
    return 0;
}

7-4 装睡

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。

输入格式:

输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。

输出格式:

按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。

输入样例:

4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71

输出样例:

Tom
Zoe

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,hu,mai;
    char name[3];
    scanf("%d\n",&n);
    
    for(int i = 0;i<n;i++){
        scanf("%s %d %d ",name,&hu,&mai);
        if(hu<15||hu>20||mai<50||mai>70){
            printf("%s\n",name);
        }
    }
}

7-5 统计学生平均成绩与及格人数

分数 300

全屏浏览题目

作者 C课程组

单位 浙江大学

本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。

输入格式:

输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。

输出格式:

按照以下格式输出:

average = 成绩均值
count = 及格人数

其中平均值精确到小数点后一位。

输入样例:

5
77 54 92 73 60

输出样例:

average = 71.2
count = 4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,score,sum=0,cnt=0;
    double aver = 0;
    scanf("%d",&n);
    
    if(n > 0){
        for(int i = 0;i<n;i++){
            scanf("%d",&score);
            if(score >= 0){
                sum += score;
            }
            if(score >= 60){
                cnt++;
            }
        }
    aver = 1.0*sum/n;
    }
    printf("average = %.1f\ncount = %d",aver,cnt);
}

7-6 输出闰年

分数 300

全屏浏览题目

作者 陈建海

单位 浙江大学

输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:

输入在一行中给出21世纪的某个截止年份。

输出格式:

逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

输入样例1:

2048

输出样例1:

2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048

输入样例2:

2000

输出样例2:

Invalid year!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int ddl,year,cnt=0;
    scanf("%d",&ddl);
    
    if(ddl<2001||ddl>2100){
        printf("Invalid year!");
    }else{
        for(year=2001;year<=ddl;year++){
            if(year%400==0||year%4==0&&year%100!=0){
                printf("%d\n",year);
                cnt++;
            }
        }if(cnt==0){
            printf("None");
        }
    }
}

7-7 高速公路超速处罚

分数 300

全屏浏览题目

作者 陈建海

单位 浙江大学

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:

65 60

输出样例1:

OK

输入样例2:

110 100

输出样例2:

Exceed 10%. Ticket 200

输入样例3:

200 120

输出样例3:

Exceed 67%. License Revoked

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int cs,xs,f;
    scanf("%d %d",&cs,&xs);
    f = (float)(cs-xs)*100/xs+0.5;
    
    if(cs>0 && xs>0){
        if(f<10){
            printf("OK\n");
        }else{
            if(f<50){
                printf("Exceed %d%%. Ticket 200\n",f);
            }else{
                printf("Exceed %d%%. License Revoked\n",f);
            }
        }
    }
}

7-8 出租车计价

分数 300

全屏浏览题目

作者 沈睿

单位 浙江大学

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

  • 起步里程为3公里,起步费10元;
  • 超起步里程后10公里内,每公里2元;
  • 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
  • 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

输入格式:

输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:

在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:

2.6 2

输出样例1:

10

输入样例2:

5.1 4

输出样例2:

14

输入样例3:

12.5 9

输出样例3:

34

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    double li;
    int time,m=0;
    scanf("%lf %d",&li,&time);
    
    if(li <= 3){
        m = 10;
    }else if(li > 3 && li <= 10){
        m = 10 + (li-3)*2 + 0.5;
    }else{
        m = 10 + 7*2 + (li-10)*3 + 0.5;
    }
    
    if(time >= 5){
        m += (time/5)*2;
    }
    printf("%d",m);
}

7-9 猜数字游戏

分数 300

全屏浏览题目

作者 C课程组

单位 浙江大学

猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。

输入格式:

输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。

输出格式:

在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。

输入样例:

58 4
70
50
56
58
60
-2

输出样例:

Too big
Too small
Too small
Good Guess!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int a,n,b;
    scanf("%d %d",&a,&n);
    
    for(int i = 1;i <= n;i++){
        scanf("%d",&b);
        if(b<0){
            printf("Game Over\n");
            break;
        }
        if(b == a){
            if(i==1){
                printf("Bingo!\n");
                break;
            }else if(i<=3){
                printf("Lucky You!\n");
                break;
            }else if(i<=n){
                printf("Good Guess!");
                break;
            }
        }if(b > a){
            printf("Too big\n");
        }if(b < a){
            printf("Too small\n");
        }if(i == n){
            printf("Game Over\n");
        }
    }
}

7-10 计算天数

分数 300

全屏浏览题目

作者 沈睿

单位 浙江大学

本题要求编写程序计算某年某月某日是该年中的第几天。

输入格式:

输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。

输出格式:

在一行输出日期是该年中的第几天。

输入样例1:

2009/03/02

输出样例1:

61

输入样例2:

2000/03/02

输出样例2:

62

鸣谢湖北汽车工业学院袁科老师、用户潘明智补充数据!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,day,sum;
    scanf("%d/%d/%d",&year,&month,&day);
    sum = day;
    
    if(year%400==0||year%4==0&&year%100!=0){
        a[2] = 29;
    }
    for(int i = 1;i<month;i++){
        sum += a[i];
    }
   printf("%d",sum);
}

7-11 分段计算居民水费

分数 300

全屏浏览题目

作者 沈睿

单位 浙江大学

为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。

输入格式:

输入在一行中给出非负实数x。

输出格式:

在一行输出应交的水费,精确到小数点后2位。

输入样例1:

12

输出样例1:

16.00

输入样例2:

16

输出样例2:

22.50

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    double x,y;
    scanf("%lf",&x);
    
    if(x<=15.0){
        y = 4*x/3*1.0;
        printf("%.2f",y);
    }else{
        y = 2.5*x-17.5;
        printf("%.2f",y);
    }
}

7-12 计算工资

分数 300

全屏浏览题目

作者 沈睿

单位 浙江大学

某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。

输入格式:

输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。

输出格式:

在一行输出该员工的周薪,精确到小数点后2位。

输入样例1:

5 40

输出样例1:

2000.00

输入样例2:

3 50

输出样例2:

1650.00

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int year,time;
    double m=1;
    scanf("%d %d",&year,&time);
    
    if(year>=5){
        m = 50;
    }else{
        m = 30;
    }
    
    if(time<=40){
        m *= time;
    }else{
        m *= 40 + (time-40)*1.5;
    }
    printf("%.2f",m);
}

7-13 两个数的简单计算器

分数 300

全屏浏览题目

作者 沈睿

单位 浙江大学

本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。

输入格式:

输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。

输出格式:

当运算符为+-*/%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR

输入样例1:

-7 / 2

输出样例1:

-3

输入样例2:

3 & 6

输出样例2:

ERROR

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int a,b;
    char y;
    scanf("%d %c %d",&a,&y,&b);
    
    if(y == '+'){
        printf("%d",a+b);
    }else if(y == '-'){
        printf("%d",a-b);
    }else if(y == '*'){
        printf("%d",a*b);
    }else if(y == '/'){
        printf("%d",a/b);
    }else if(y == '%'){
        printf("%d",a%b);
    }else{
        printf("ERROR");
    }
}

7-14 念数字

分数 300

全屏浏览题目

作者 翁恺

单位 浙江大学

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

输入格式:

输入在一行中给出一个整数,如:1234

提示:整数包括负数、零和正数。

输出格式:

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si

输入样例:

-600

输出样例:

fu liu ling ling

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>

int main()
{
    int num;
    int count=0;
    scanf("%d",&num);
    
    if(num==0){
        printf("ling\n");
        return 0;
    }if(num<0){
        printf("fu ");
        num = -num;
    }
    
    int x;
    x = num;
    while (x>0){
        x/=10;
        count++;
    }
    
    int dao[count];
    int shu[count];
    for (int i=0;i<count;i++){
        int m;
        m = num%10;
        num /= 10;
        dao[i]=m;
    }
    for (int i=count-1;i>-1;i--){
        shu[i]=dao[i];
        switch(shu[i]){
            case 0: printf("ling");break;
            case 1: printf("yi"); break;
            case 2: printf("er"); break;
            case 3: printf("san"); break;
            case 4: printf("si"); break;
            case 5: printf("wu"); break;
            case 6: printf("liu"); break;
            case 7: printf("qi"); break;
            case 8: printf("ba"); break;
            case 9: printf("jiu"); break;
        }
        if (i>0) {
            printf(" ");
        }
    }return 0;
}

7-15 单词长度

分数 300

全屏浏览题目

作者 翁恺

单位 浙江大学

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

输入格式:

输入在一行中给出一行文本,以.结束

提示:scanf("%c",...);来读入一个字符,直到读到.为止。

输出格式:

在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:

It's great to see you here.

输出样例:

4 5 2 3 3 4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int sum = 0;
    char str;
    int flag=0;

    while((str = getchar()) != '.'){
        if((str != ' ')){
            sum++;
        }else if(sum!=0){
            if(flag != 0){
               printf(" ") ;
            }
            flag=1;
            printf("%d",sum);
            sum = 0;
              }
        else{
            continue;
         }
    }
    if(flag==1&&sum!=0){
        printf(" ");
    }
   if(sum){
    printf("%d",sum);
} 
    return 0;
}

7-16 奇偶分家

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

给定N个正整数,请统计奇数和偶数各有多少个?

输入格式:

输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。

输出格式:

在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。

输入样例:

9
88 74 101 26 15 0 34 22 77

输出样例:

3 6

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,a;
    scanf("%d",&n);
    int ji=0,ou=0;
    
    for(int i = 0;i<n;i++){
        scanf("%d ",&a);
        if(a != 1){
            if(a % 2 == 1){
                ji++;
            }else{
                ou++;
            }
        }else{
            ji++;
        }
    }
    printf("%d %d",ji,ou);
}

7-17 编程团体赛

分数 300

全屏浏览题目

作者 CHEN, Yue

单位 浙江大学

编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。

现给定所有队员的比赛成绩,请你编写程序找出冠军队。

输入格式:

输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。

输出格式:

在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。

输入样例:

6
3-10 99
11-5 87
102-1 0
102-3 100
11-9 89
3-2 61

输出样例:

11 176

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,w,y;
    scanf("%d",&n);
    int s[10000],score[1000] = {0};
    int cp=0,cps=0;
    
    if(n > 0){
        for(int i = 1;i<=n;i++){
            scanf("%d-%d %d",&w,&y,&s[i]);
            score[w] += s[i];
        }
        for(int j = 0;j<1000;j++){
            if(cps<score[j]){
                cps = score[j];
                cp = j;
            }
        }
    }
    printf("%d %d",cp,cps);
}

7-18 N个数求和

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:

输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:

5
2/5 4/15 1/30 -2/60 8/3

输出样例1:

3 1/3

输入样例2:

2
4/3 2/3

输出样例2:

2

输入样例3:

3
1/3 -1/6 1/8

输出样例3:

7/24

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C++ (g++)

#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b)//求最大公约数。
{
	if (a == 0)
		return 0;
	else
		return (b == 0) ? a : gcd(b, a % b);
}
 
int main()
{
	int n;
	cin >> n;
	long long int a, b, c, d;
	scanf("%lld/%lld", &a, &b);
	long long int yue;
	yue = gcd(a, b);
	if (a != 0)
	{
		a = a / yue;
		b = b / yue;
	}
	for (int i = 1; i < n; i++)
	{
		scanf("%lld/%lld", &c, &d);
		yue = b / gcd(b, d)*d;
		a = a * yue / b + c * yue / d;
		b = yue;
		yue = gcd(a, b);
		if (yue != 0)
		{
			a = a / yue;
			b = b / yue;
		}
	}
	if (a && a / b == 0)
		printf("%lld/%lld\n", a%b, b);
	else if (a%b == 0)
		printf("%lld\n", a / b);
	else
		printf("%lld %lld/%lld\n", a / b, a%b, b);
	return 0;
}
 

7-19 判断题

分数 300

全屏浏览题目

作者 CHEN, Yue

单位 浙江大学

判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。

输入格式:

输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。

输出格式:

按照输入的顺序输出每个学生的得分,每个分数占一行。

输入样例:

3 6
2 1 3 3 4 5
0 0 1 0 1 1
0 1 1 0 0 1
1 0 1 0 1 0
1 1 0 0 1 1

输出样例:

13
11
12

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,m,cnt=0;
    scanf("%d %d",&n,&m);
    
    if(n<1||n>100||m<1||m>100){
        return 0;
    }else
    {
        int man[101],k;
        for(int i = 0;i<m;i++){
            do{
                scanf("%d",&k);
            }while(k<0||k>5);
            man[i] = k;
        }

        int a[101];
        for(int i = 0;i<m;i++){
            scanf("%d",&a[i]);
        }
        int b;
        for(int j = 0;j<n;j++){
            for(int k = 0;k<m;k++){
                scanf("%d",&b);
                if(b==a[k]){
                    cnt += man[k];
                }
            }
            printf("%d\n",cnt);
            cnt = 0;
        }
        return 0;
    }
}

7-20 谁是赢家

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定。规则为:如果一位艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出;或艺人的观众票数低,但得到全部评委的认可,也可以胜出。节目保证投票的观众人数为奇数,所以不存在平票的情况。本题就请你用程序判断谁是赢家。

输入格式:

输入第一行给出 2 个不超过 1000 的正整数 Pa 和 Pb,分别是艺人 a 和艺人 b 得到的观众票数。题目保证这两个数字不相等。随后第二行给出 3 名评委的投票结果。数字 0 代表投票给 a,数字 1 代表投票给 b,其间以一个空格分隔。

输出格式:

按以下格式输出赢家:

The winner is x: P1 + P2

其中 x 是代表赢家的字母,P1 是赢家得到的观众票数,P2 是赢家得到的评委票数。

输入样例:

327 129
1 0 1

输出样例:

The winner is a: 327 + 1

鸣谢安阳师范学院软件学院李栋同学完善测试数据。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int pa,pb;
    int w,m=0,n=0;
    scanf("%d %d\n",&pa,&pb);
    
    for(int i = 0;i<3;i++){
        scanf("%d ",&w);
        if(w == 0){
            m++;
        }else{
            n++;
        }
    }
    
    if(pa<1||pa>1000||pb<1||pb>1000){
        return 0;
    }else{
        if(pa > pb){
            if(m>=1){
                printf("The winner is a: %d + %d",pa,m);
            }else{
                printf("The winner is b: %d + %d",pb,n);
            }
        }else{
            if(n=3){
                printf("The winner is b: %d + %d",pb,n);
            }else{
                printf("The winner is a: %d + %d",pa,m);
            }
        }
        return 0;
    }
}

7-21 整数的分类处理

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

给定 N 个正整数,要求你从中得到下列三种计算结果:

  • A1 = 能被 3 整除的最大整数

  • A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数

  • A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)

输入格式:

输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。

输出格式:

在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE

输入样例 1:

8
5 8 7 6 9 1 3 10

输出样例 1:

9 3 6.5

输入样例 2:

8
15 18 7 6 9 1 3 10

输出样例 2:

18 3 NONE

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,m;
    scanf("%d",&n);
    int a1=0,a2=0,cnt2=0,cnt3=0;
    double a3=0;
    int flag1=0,flag2=0,flag3=0,sum=0;
    
    for(int i = 0;i<n;i++){
        scanf("%d",&m);
        if(m%3==0 && m > a1){
            a1 = m;
            flag1=1;
        }
        
        if(m%3==1){
            cnt2++;
            flag2=1;
        }
        
        if(m%3==2){
            cnt3++;
            sum += m;
            flag3=1;
        }
    }
    
    if(flag1==1) printf("%d ",a1);
    else printf("NONE ");
    if(flag2==1) printf("%d ",cnt2);
    else printf("NONE ");
    if(flag3==1) printf("%.1lf",sum*1.0/cnt3);
    else printf("NONE");
    return 0;
}

7-22 判断一个三位数是否为水仙花数

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:

输入在一行中给出一个需要判断的整数 N(100≤N≤999)。

输出格式:

如果N是水仙花数,则在一行中输出Yes,否则输出No。如果N不是三位数,则输出Invalid Value.

输入样例1:

153

输出样例1:

Yes

输入样例2:

500

输出样例2:

No

输入样例3:

-2

输出样例3:

Invalid Value.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,sum;
    scanf("%d",&n);
   
    int b,s,g;
    b = n/100;
    s = (n%100)/10;
    g = n % 10;
    
    sum = b*b*b+s*s*s+g*g*g;
    
    if(n<100||n>999){
        printf("Invalid Value.");
    }else{
        if(sum == n){
            printf("Yes");
        }else{
            printf("No");
        }
    }
}

7-23 找出三位水仙花数

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:

输入在一行中给出两个正整数M和N(100≤M≤N≤999)。

输出格式:

顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。

如果M或者N不符合题目的要求,则输出Invalid Value.

输入样例1:

100 400

输出样例1:

153
370
371

输入样例2:

500 600

输出样例2:


输入样例3:

990 101

输出样例3:

Invalid Value.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    
    if(m<100||m>n||n>999){
        printf("Invalid Value.");
    }else{
        for(int i = m;i<=n;i++){
            int b,s,g,sum;
            b = i/100;
            s = (i%100)/10;
            g = i % 10;
            sum = b*b*b+s*s*s+g*g*g;
            
            if(sum == i){
                printf("%d\n",i);
            }
        }
    }
}

7-24 胎压监测

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

小轿车中有一个系统随时监测四个车轮的胎压,如果四轮胎压不是很平衡,则可能对行车造成严重的影响。

让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序,随时监测四轮的胎压,并给出正确的报警信息。报警规则如下:

  • 如果所有轮胎的压力值与它们中的最大值误差在一个给定阈值内,并且都不低于系统设定的最低报警胎压,则说明情况正常,不报警;

  • 如果存在一个轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则不仅要报警,而且要给出可能漏气的轮胎的准确位置;

  • 如果存在两个或两个以上轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则报警要求检查所有轮胎。

输入格式:

输入在一行中给出 6 个 [0, 400] 范围内的整数,依次为 1~4 号轮胎的胎压、最低报警胎压、以及胎压差的阈值。

输出格式:

根据输入的胎压值给出对应信息:

  • 如果不用报警,输出 Normal

  • 如果有一个轮胎需要报警,输出 Warning: please check #X!,其中 X 是出问题的轮胎的编号;

  • 如果需要检查所有轮胎,输出 Warning: please check all the tires!

输入样例 1:

242 251 231 248 230 20

输出样例 1:

Normal

输入样例 2:

242 251 232 248 230 10

输出样例 2:

Warning: please check #3!

输入样例 3:

240 251 232 248 240 10

输出样例 3:

Warning: please check all the tires!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C++ (clang++)

#include<bits/stdc++.h>
using namespace std;
int main(){
   	int a[4],p,q,cnt=0,b[4]={0},Max=-1;
   	for(int i=0;i<4;i++){
   		cin>>a[i];//依次为 1~4 号轮胎的胎压。 
   		Max=max(Max,a[i]);
	   }
	cin>>p>>q;
	//p为最低报警胎压、q胎压差的阈值。 
	for(int i=0;i<4;i++){
		if(a[i]<p) b[i]++;
		
		if(Max-a[i]>q) b[i]++;
	}
	
	//统计四个轮胎的情况
	for(int i=0;i<4;i++){
		if(b[i]!=0) cnt++;
	} 
	if(cnt>=2) cout<<"Warning: please check all the tires!";
	else if(cnt==1){
		for(int i=0;i<4;i++){
			if(b[i]!=0){
				cout<<"Warning: please check #"<<i+1<<"!";
                break;

			}
		}
	}else{
		cout<<"Normal";
	}  
    return 0;
}

 7-25 统计字符[2]

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题要求编写程序,输入N个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入格式:

输入在第一行中给出正整数N,第二行输入N个字符,最后一个回车表示输入结束,不算在内。

输出格式:

在一行内按照

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:

10
aZ &
09 Az

输出样例:

letter = 4, blank = 3, digit = 2, other = 1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int le=0,bl=0,di=0,ot=0;
    char c;
	getchar();
    for(int i = 0;i<n;i++){
    	c= getchar();
        if((c>='A'&& c<='Z')||(c>='a'&& c<='z')){
            le++;
        }
		else if((c== ' ')||(c == '\n')){
            bl++;
        }
		else if(c>= '0'&&c <= '9'){
            di++;
        }
		else{
            ot++;
        }
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d\n",le,bl,di,ot);
    return 0;
}

7-26 统计数字字符和空格

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题要求编写程序,输入一行字符,统计其中数字字符、空格和其他字符的个数。建议使用switch语句编写。

输入格式:

输入在一行中给出若干字符,最后一个回车表示输入结束,不算在内。

输出格式:

在一行内按照

blank = 空格个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:

在这里给出一组输入。例如:

Reold 12 or 45T

输出样例:

在这里给出相应的输出。例如:

blank = 3, digit = 4, other = 8

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int bl=0,di=0,ot=0;
    char c;
   // getchar();
    
    while(c != '\n'){
        c= getchar();
        switch(c){
            case ' ':
                bl++;
                break;
            case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':case '0':
                di++;
                break;
            default:
                ot++;
                break;
        }
    } 
    ot -= 1;
    printf("blank = %d, digit = %d, other = %d\n",bl,di,ot);
    return 0;
}

7-27 天梯赛的善良

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。

于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的),然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。

输入格式:

输入在第一行中给出一个正整数 N(≤2×104),即参赛学生的总数。随后一行给出 N 个不超过 106 的正整数,是参赛学生的能力值。

输出格式:

第一行输出所有参赛学生的最小能力值,以及具有这个能力值的学生人数。第二行输出所有参赛学生的最大能力值,以及具有这个能力值的学生人数。同行数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

10
86 75 233 888 666 75 886 888 75 666

输出样例:

75 3
888 2

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,nl;
    scanf("%d",&n);
    
    int max=0,min=1000000;
    int sum1=1,sum2=1;
    
    for(int i = 1;i<=n;i++){
        scanf("%d",&nl);
        if(nl == max){
            sum1++;
        }if(nl == min){
            sum2++;
        }if(nl > max){
            max = nl;
            sum1=1;
        }if(nl < min){
            min = nl;
            sum2=1;
        }
    }
    printf("%d %d\n%d %d",min,sum2,max,sum1);
}

7-28 判断素数

分数 300

全屏浏览题目

作者 陈越

单位 浙江大学

本题的目标很简单,就是判断一个给定的正整数是否素数。

输入格式:

输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。

输出格式:

对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No

输入样例:

2
11
111

输出样例:

Yes
No

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
#include <math.h>
int main()
{
	int n,m,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&m);
		if(m==1)
			printf("No\n");
		else
		{
			for(j=2;j<=sqrt(m);j++)
				if(m%j==0)
					break;
			if(j>sqrt(m))
			    printf("Yes\n");
			else 
				printf("No\n");
		}
	}
	return 0;	
}
 

7-29 简单求阶乘问题

分数 300

全屏浏览题目

作者 颜晖

单位 浙大城市学院

本题要求编写程序,计算N的阶乘。

输入格式:

输入在一行中给出一个不超过12的正整数N。

输出格式:

在一行中输出阶乘的值。

输入样例:

4

输出样例:

24

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

# include<stdio.h>
int main()
{
    int n,j=1;
    scanf("%d",&n);
    
    for(int i = 1;i<=n;i++){
        j *= i;
    }
    printf("%d",j);
}

7-1 输出学生成绩

分数 20

全屏浏览题目

作者 张泳

单位 浙大城市学院

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩

结果均保留两位小数。

输入样例:

3
85 90 95

输出样例:

average = 90.00
max = 95.00
min = 85.00

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main(){
    int n;
    scanf("%d\n",&n);
    int i;
    double a[n],max,min,s=0,ave;
    for(i=0;i<n;i++){
        scanf("%lf",&a[i]);
        s+=a[i];
        if(i==0){
            max=a[i];
            min=a[i];
        }
        if(a[i]>max)
            max=a[i];
        if(a[i]<min)
            min=a[i];
    }
    ave=1.0*s/n;
    printf("average = %.2f\n",ave);
    printf("max = %.2f\n",max);
    printf("min = %.2f",min);
    return 0;
}

7-2 组织星期信息

分数 10

全屏浏览题目

作者 王秀

单位 福州大学

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出

输入样例 (repeat=3) :

3
Tuesday
Wednesday
year

输出样例:

3
4
-1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char *p[] ={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
	int repeat;		//输入几个数
	int i,j;		//用于循环和数组下标
	//int flag = 0;	//判断是否有输出那句话
	char tmp[50];	//输入的字符串
	scanf("%d",&repeat);
	getchar();
	for(i=0;i<repeat;i++)
	{
		gets(tmp);
		for(j=0;j<7;j++)
		{
			if(strcmp(tmp,p[j])==0)
			{	printf("%d\n",j+1);	break;	}
			else if(j==6)
				printf("-1\n");
		}
	}
	return 0;
}

7-3 利用指针返回多个函数值

分数 30

全屏浏览题目

作者 陈晓梅

单位 广东外语外贸大学

读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。

输入格式:

输入有两行:
第一行是n值;
第二行是n个数。

输出格式:

输出最大值和最小值。

输入样例:

在这里给出一组输入。例如:

5
8 9 12 0 3

输出样例:

在这里给出相应的输出。例如:

max = 12
min = 0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
void max_min(int a[],int n,int *pmax,int *pmin);
int main(){
    int n,i;
    int a[80]; 
    int *pmax,*pmin;    
    scanf("%d",&n);    
    for(i=0;i<n;i++){        
    scanf("%d",&a[i]);    }    
    max_min(a,n,&pmax,&pmin);    
    return 0;}
void max_min(int a[],int n,int *pmax,int *pmin){
    int i,j,t;
    *pmax=a[0];
    *pmin=a[0];
    for(i=0;i<n;i++){
          if(*pmax<a[i]) *pmax=a[i];
          if(*pmin>a[i]) *pmin=a[i];    
}    
printf("max = %d\nmin = %d",*pmax,*pmin);
}

7-1 输出学生成绩

分数 20

全屏浏览题目

作者 张泳

单位 浙大城市学院

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩

结果均保留两位小数。

输入样例:

3
85 90 95

输出样例:

average = 90.00
max = 95.00
min = 85.00

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)


#include<stdio.h>
int main(){
    int n;
    scanf("%d\n",&n);
    int i;
    double a[n],max,min,s=0,ave;
    for(i=0;i<n;i++){
        scanf("%lf",&a[i]);
        s+=a[i];
        if(i==0){
            max=a[i];
            min=a[i];
        }
        if(a[i]>max)
            max=a[i];
        if(a[i]<min)
            min=a[i];
    }
    ave=1.0*s/n;
    printf("average = %.2f\n",ave);
    printf("max = %.2f\n",max);
    printf("min = %.2f",min);
    return 0;
}

7-2 矩阵转置

分数 10

全屏浏览题目

作者 王秀

单位 福州大学

用指针实现将一个3*3的整型矩阵转置。

要求定义并调用函数void move(int *pointer),实现上述矩阵转置的功能。

输出格式:每行数据之间以空格分隔,最后一个数据后面没有空格

输入样例:

1 2 3
4 5 6
7 8 9

输出样例:

1 4 7
2 5 8
3 6 9

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
void main()
{void move(int*pointer);
int a[3][3],*p,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
p=&a[0][0];
move(p);
for(i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
void move(int*pointer)
{
int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{ 
t=*(pointer+3*i+j); 
*(pointer+3*i+j)=*(pointer+3*j+i);
 *(pointer+3*j+i)=t; }
}

7-3 组织星期信息

分数 10

全屏浏览题目

作者 王秀

单位 福州大学

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出

输入样例 (repeat=3) :

3
Tuesday
Wednesday
year

输出样例:

3
4
-1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
#include <string.h>

int main()
{
    char *word[] = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"};
    int repeat, i, j, k = 0, a[10];
    char s[10];
    
    scanf("%d ", &repeat);
    for (i=0; i<repeat; i++)
    {
        scanf("%s", &s);
        for (j=0; j<7; j++)
        {
            if(strcmp(s, word[j]) == 0)
            {
                a[k] = j + 1;
                k++;
                break;
            }
        }
        if(j >= 7)
        {
            a[k] = -1;
            k++;
		}   
    }
    for (i=0; i<repeat; i++)
    {
    	printf("%d\n", a[i]);
	}
    return 0;
}

7-4 利用指针返回多个函数值

分数 30

全屏浏览题目

作者 陈晓梅

单位 广东外语外贸大学

读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。

输入格式:

输入有两行:
第一行是n值;
第二行是n个数。

输出格式:

输出最大值和最小值。

输入样例:

在这里给出一组输入。例如:

5
8 9 12 0 3

输出样例:

在这里给出相应的输出。例如:

max = 12
min = 0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
void max_min(int a[],int n,int *pmax,int *pmin);
int main(){
    int n,i;
    int a[80]; 
    int *pmax,*pmin;    
    scanf("%d",&n);    
    for(i=0;i<n;i++){        
    scanf("%d",&a[i]);    }    
    max_min(a,n,&pmax,&pmin);    
    return 0;}
void max_min(int a[],int n,int *pmax,int *pmin){
    int i,j,t;
    *pmax=a[0];
    *pmin=a[0];
    for(i=0;i<n;i++){
          if(*pmax<a[i]) *pmax=a[i];
          if(*pmin>a[i]) *pmin=a[i];    
}    
printf("max = %d\nmin = %d",*pmax,*pmin);
}

7-1 求最大值及其下标

分数 20

全屏浏览题目

作者 C课程组

单位 浙江大学

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:

6
2 8 10 1 9 10

输出样例:

10 2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main()
{
	int n,max,j,i;
	scanf("%d",&n);
	int s[n];
	scanf("%d",&s[0]);
	max=s[0];
	for(i=1;i<n;i++)
	{
		scanf("%d",&s[i]);
	    if(s[i]>max) max=s[i];
	}
	for(i=0;i<n;i++)
	{
		if(s[i]==max)
		{
			j=i;
			break;
		}
	}
	printf("%d %d",max,j);
	return 0;
	
}

7-2 将数组中的数逆序存放

分数 20

全屏浏览题目

作者 C课程组

单位 浙江大学

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

输入格式:

输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。

输入样例:

4
10 8 1 2

输出样例:

2 1 8 10

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main(){
    int n,i;
    scanf("%d",&n);
    int a[n];
    for(i=n-1;i>=0;i--) scanf("%d",&a[i]);
    for(i=0;i<n;i++) {
        printf("%d",a[i]);
        if(i<n-1) printf(" ");
    }
    return 0;
}

7-3 选择法排序

分数 20

全屏浏览题目

作者 C课程组

单位 浙江大学

本题要求将给定的n个整数从大到小排序后输出。

输入格式:

输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

4
5 1 7 6

输出样例:

7 6 5 1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)


#include <stdio.h>
#include <string.h>
int main(void){
	int a[10];
	int n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	int temp;
	int index;
    for(i=0;i<n;i++){
    	index=i;
    	for(j=i+1;j<n;j++){
    		if(a[j]>a[index]){
    			index=j;
    		}
    	}
		temp=a[index];
		a[index]=a[i];
		a[i]=temp; 
    }
    
    printf("%d",a[0]);
    for(i=1;i<n;i++){
    	printf(" %d",a[i]);
    }   
	return 0;  
}

7-4 数字加密

分数 15

全屏浏览题目

作者 陈建海

单位 浙江大学

输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。

输入格式:

输入在一行中给出一个四位的整数x,即要求被加密的数。

输出格式:

在一行中按照格式“The encrypted number is V”输出加密后得到的新数V。

输入样例:

1257

输出样例:

The encrypted number is 4601

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main()
{
    int number;
    int i;
    int a[4]={0};//数组初始化
    int b,c,d,e;//个、十、百、千
    int sum;
    scanf("%d",&number);//是四位数字
    for(i=0;i<4;i++)
    {
        a[i]=number%10;
        number=number/10;
        //从个位数字开始倒序输出,把四位数代入数组中
    }
     b=(a[0]+9)%10;//个
     c=(a[1]+9)%10;//十
     d=(a[2]+9)%10;//百
     e=(a[3]+9)%10;//千
     sum=c*1000+b*100+e*10+d;//注意乘的顺序
     printf("The encrypted number is %04d",sum);
    return 0;
}

7-5 交换最小值和最大值

分数 15

全屏浏览题目

作者 C课程组

单位 浙江大学

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:

输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:

在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:

5
8 2 5 1 4

输出样例:

1 2 5 4 8 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
int main()
{
    int a[100];
    int n;
    int num1,num2;
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
        int max=a[0];
        num1=0;
    for (int i=1;i<n;i++)//找最大数,记住下标num1
    {
        if (max<a[i])
        {
            max=a[i];
            num1=i;
        }
    }
    int min=a[0];
    num2=0;
    for (int i=1;i<n;i++)//找最小数,记住下标num2
    {
        if (min>a[i])
        {
            min=a[i];
            num2=i;
        }
    }
    int temp;
    if (max==a[0])//如果第一个数是最大数,将min与max互换,再将max与最后一个数互换
        //因为我的else是先换的最小值,所以不用再加如果最后一个数是最小数
    {
        a[0]=min;
        a[num2]=max;
        temp=a[n-1];
        a[n-1]=max;
        a[num2]=temp;
    }
    else 
    {
    temp=a[0];
    a[0]=min;
    a[num2]=temp;//将第一个数与最小数互换位置
    temp=a[n-1];
    a[n-1]=max;
    a[num1]=temp;//将最后一个数与最大数互换位置
    }
    for (int i=0;i<n;i++)//输出
    {

            printf("%d ",a[i]);
    }
    return 0;
}

7-6 求整数序列中出现次数最多的数

分数 15

全屏浏览题目

作者 张彤彧

单位 浙江大学

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式:

输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式:

在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例:

10 3 2 -1 5 3 4 3 0 3 2

输出样例:

3 4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)


#include <stdio.h>
 
int main () {
    int n,i,j,t,cnt;
    scanf ("%d",&n);
    int a[n];
    for ( i=0; i<n; i++ ){
        scanf ("%d",&a[i]);
    }
    int  max[n];
    for ( i=0; i<n; i++){
        cnt = 0;                //计数器
        for ( j=0; j<n; j++ ){
            if ( a[i] == a[j])
                cnt ++;
        }
        max[i] = cnt;           //统计a[i]出现了多少次
    }
    t = 0;
    for ( i=1; i<n; i++ ){      //找出出现次数最多的数的下标
        if ( max[t] < max[i])
            t = i;
    }
    printf ("%d %d",a[t],max[t]);
    return 0 ; 
}

7-7 冒泡法排序

分数 20

全屏浏览题目

作者 徐镜春

单位 浙江大学

将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。

输入格式:

输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。

输出格式:

在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:

6 2
2 3 5 1 6 4

输出样例:

2 1 3 4 5 6

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main(void)
{
  int N,K,t;
  int i,j;
  int a[100];
  scanf("%d %d",&N,&K);
  for(i=0;i<N;i++)
  {
  	scanf("%d",&a[i]);
  }
  for(i=0;i<K;i++)
  {
  	for(j=0;j<N-i-1;j++)
  	{
  		if(a[j]>a[j+1])
  		{
  			t = a[j+1];
  			a[j+1] = a[j];
  			a [j] = t;
		  }
	  }
  }
  for(i=0;i<N-1;i++)
  {
  	printf("%d ",a[i]);
  }
  printf("%d",a[N-1]);
  return 0;
}

7-8 出生年

分数 15

全屏浏览题目

作者 陈越

单位 浙江大学

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式:

输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:

根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C++ (g++)

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
 
bool Is(int y, int n) {
	int a, b, c, d;
	int s[10] = { 0 };
	a = y / 1000;
	b = (y % 1000) / 100;
	c = y % 1000 % 100 / 10;
	d = y % 10;
	s[a]++; s[b]++; s[c]++; s[d]++;
	int res = 0;
	for (int i = 0; i < 10; i++) {
		if (s[i])res++;
	}
	if (res == n)return true;
	else return false;
}
 
int main() {
	int y, n;
	cin >> y >> n;
	int i = 0;
	for (;; i++) {
		if (Is(y + i, n))break;
	}
	printf("%d %04d", i, y + i);
	return 0;
}

 7-9 点赞

分数 20

全屏浏览题目

作者 陈越

单位 浙江大学

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1​⋯FK​”,其中1≤K≤10,Fi​(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式:

统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

输入样例:

4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123

输出样例:

233 3

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main() 
{
    //max1为次数,max2为数据 
    int n, k, num, max1= 0, max2= 0;
    scanf("%d", &n);//控制整个输入几组数据的 
    int arr[1001] = {0};
    for (int i=0;i<n;i++) 
    {
        scanf("%d", &k);//输入第一行的数据 
        for (int j=0;j<k;j++) 
        {
            scanf("%d", &num);
            arr[num]++;//统计存入相同的数出现的次数, 
        }
    }
    // 输出出现次数最多的数据,并把他次数数出来 
    for (int i=0;i<1001;i++)
     {
        if (arr[i] >= max1)
         {
            max1= arr[i];
            max2= i;
        }
    }
    printf("%d %d",max2,max1);
    return 0;
}

7-10 判断题

分数 15

全屏浏览题目

作者 CHEN, Yue

单位 浙江大学

判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。

输入格式:

输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。

输出格式:

按照输入的顺序输出每个学生的得分,每个分数占一行。

输入样例:

3 6
2 1 3 3 4 5
0 0 1 0 1 1
0 1 1 0 0 1
1 0 1 0 1 0
1 1 0 0 1 1

输出样例:

13
11
12

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
int main(){
	int N,M;
	scanf("%d%d",&N,&M);
	int Score[101];//每道题的分值
	for (int i=0;i<M;i++)scanf("%d",&Score[i]);
	int TrueAnswer[101];//每道题的正确选项
	for (int i=0;i<M;i++)scanf("%d",&TrueAnswer[i]); 
	int temp;//学生给出的答案 
	int HisScore;//该名学生截至目前得分 
	for (int i=0;i<N;i++){
		HisScore=0; 
		for (int j=0;j<M;j++){
			scanf("%d",&temp);
			 if(temp==TrueAnswer[j]){
			 	HisScore+=Score[j];
			 }
		}
		printf("%d\n",HisScore);
	}
}

7-11 乘法口诀数列

分数 20

全屏浏览题目

作者 陈越

单位 浙江大学

本题要求你从任意给定的两个 1 位数字 a1​ 和 a2​ 开始,用乘法口诀生成一个数列 {an​},规则为从 a1​ 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。

输入格式:

输入在一行中给出 3 个整数,依次为 a1​、a2​ 和 n,满足 0≤a1​,a2​≤9,0<n≤103。

输出格式:

在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

2 3 10

输出样例:

2 3 6 1 8 6 8 4 8 4

样例解释:

数列前 2 项为 2 和 3。从 2 开始,因为 2×3=6,所以第 3 项是 6。因为 3×6=18,所以第 4、5 项分别是 1、8。依次类推…… 最后因为第 6 项有 6×8=48,对应第 10、11 项应该是 4、8。而因为只要求输出前 10 项,所以在输出 4 后结束。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
#include<stdio.h>
#include<math.h>
int main()
{
int a[20000],n,c=2,t;
    for(int i=0;i<2;i++)
    {   scanf("%d",&a[i]);}
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        t=a[i]*a[i+1];
        if(t<10) a[c++]=t;
        else
        {
            a[c++]=t/10;
            a[c++]=t%10;
        }
    }
    for(int i=0;i<n;i++)
    {
        printf("%d",a[i]);
        if(i!=n-1) printf(" ");
    }
    return 0;
}

7-12 试试手气

分数 15

全屏浏览题目

作者 陈越

单位 浙江大学

我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:

  • 1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;

  • 2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。

那么你应该可以预知自己第 n 次(1≤n≤5)摇出的结果。

输入格式:

输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数 n(1≤n≤5)。

输出格式:

在一行中顺序列出第 n 次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。

输入样例:

3 6 5 4 1 4
3

输出样例:

4 3 3 3 4 3

样例解释:

这 3 次摇出的结果依次为:

6 5 6 6 6 6
5 4 4 5 5 5
4 3 3 3 4 3

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C++ (g++)

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[6],n;
    for(int i=0;i<6;i++){
        cin>>a[i];
    }
    cin>>n;
    for(int i=0;i<6;i++){
        if(i) cout<<" ";
        int x=a[i],cnt=0;
        for(int k=6;k>=0;k--){
            if(x!=k) cnt++;
            else continue;
            if(cnt==n) cout<<k;
        }
    }
    return 0;
}

C (gcc)

#include<stdio.h>
int main()
{
	int a[6],b[6]={0},i,n,j,t;  //数组b用来装 6个骰子的初始点数  
	for(i=0;i<6;i++)     //将初始点数输入到a数组 
	{
		scanf("%d",&a[i]);
		b[i]=a[i];      //将点数值放入下标相同的b数组 
	} 
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<6;j++)
		{
			if(i==0)     //准备第一次摇 
			{
				if(a[j]!=6) //如果初始点数不是6 赋值6 
					a[j]=6;
				else        //初始点数是6 在原来的基础上-- 
					a[j]--; 
			}
			else if(i!=0)   //第一次之后 
			{
				if(a[j]-1==b[j])  //接下来摇出的点数与初始点数相同 需要跳过 -2 
					a[j]=a[j]-2;
				else              //接下来摇出的点数与初始点数不相同  -1 
					a[j]--;
			}
		}		
	}
	for(i=0;i<6;i++)   //输出 控制空格 
	{
		if(i<5)
			printf("%d ",a[i]);	
		else
			printf("%d",a[i]);	
	}
	return 0;
}

 7-13 静静的推荐

分数 20

全屏浏览题目

作者 陈越

单位 浙江大学

天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:

  • 只考虑得分不低于 175 分的学生;

  • 一共接受 K 批次的推荐名单;

  • 同一批推荐名单上的学生的成绩原则上应严格递增;

  • 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。

给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?

输入格式:

输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。

随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。

输出格式:

在一行中输出静静姐最多能向企业推荐的学生人数。

输入样例:

10 2 90
203 0
169 91
175 88
175 0
175 90
189 0
189 0
189 95
189 89
256 100

输出样例:

8

样例解释:

第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。

代码长度限制

16 KB

Java (javac)

时间限制

1300 ms

内存限制

256 MB

Python (python3)

时间限制

400 ms

内存限制

64 MB

其他编译器

时间限制

200 ms

内存限制

64 MB

C++ (g++)

#include <bits/stdc++.h>
using namespace std;
int m[300];
int main()
{
    int n, k, s;
    cin >> n >> k >> s;
    int sky, pat, cnt = 0;
    memset(m, 0, sizeof(m));
    for ( int i = 0; i < n; i ++ ) 
    {
        cin >> sky >> pat;
        if ( sky >= 175 && pat >= s )
            cnt ++;
        else m[sky] ++;
    }
    int sum = 0;
    for ( int i = 175; i < 291; i ++ ) 
    {
        if ( m[i] <= k ) sum += m[i];
        else sum += k;
    }
    sum += cnt;
    cout << sum << endl;
    
    return 0;
}

7-1 字符串排序

分数 20

全屏浏览题目

作者 张泳

单位 浙大城市学院

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue black white

输出样例:

After sorted:
black
blue
red
white
yellow

鸣谢贵州民族大学张玉全老师修正数据!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
#include<string.h>
int main(){
	int i,j;
	char s[5][85],t[85];
	for(i=0;i<5;i++)
		scanf("%s",s[i]);
	for(i=0;i<4;i++)
		for(j=0;j<4-i;j++)
			if(strcmp(s[j],s[j+1])>0){//字符串的比较
				strcpy(t,s[j]);//字符串的复制
				strcpy(s[j],s[j+1]);
				strcpy(s[j+1],t);
			}
	printf("After sorted:\n");
	for(i=0;i<5;i++)
		printf("%s\n",s[i]);
	return 0;
}

7-2 输出学生成绩

分数 20

全屏浏览题目

作者 张泳

单位 浙大城市学院

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩

结果均保留两位小数。

输入样例:

3
85 90 95

输出样例:

average = 90.00
max = 95.00
min = 85.00

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
int main()
{
	int n, i, a[100000];
	double average, max, min=1000, sum;
	max=sum=0;
	scanf("%d", &n);
	for (i=0; i<n; i++)
	{
		scanf("%d", &a[i]);
		sum=sum+a[i];
	}
	average=sum/n;
	for (i=0; i<n; i++)
	{
		if (a[i]<min)
			min=a[i];
		if (a[i]>max)
			max=a[i];
	}
	printf("average = %.2f\n", average);
	printf("max = %.2f\n", max);
	printf("min = %.2f\n", min);
	return 0;
}

7-3 A-B

分数 20

全屏浏览题目

作者 陈越

单位 浙江大学

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

输入格式:

输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出A−B的结果字符串。

输入样例:

I love GPLT!  It's a fun game!
aeiou

输出样例:

I lv GPLT!  It's  fn gm!

代码长度限制

16 KB

时间限制

150 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
int main(){
    char a[10001],b[10001],c[10001];
    gets(a);
    gets(b);
    int i=0,k=0;
    while(a[i]!='\0'){
        int j=0;
        int flag=0;
        while(b[j]!='\0'){
            if(a[i]==b[j]){
                flag=1;
                break;
            }
            j++;
        }
        if(flag!=1){
            c[k]=a[i];
            k++;
        }
        i++;
    }
    c[k]='\0';
    printf("%s",c);
    return 0;
}

7-4 计算阶乘和

分数 10

全屏浏览题目

作者 陈越

单位 浙江大学

对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!。

输入格式:

输入在一行中给出一个不超过10的正整数N。

输出格式:

在一行中输出S的值。

输入样例:

3

输出样例:

9

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C++ (g++)

#include<stdio.h>
int main(){
    int n,sum=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int k=1;
        for(int j=1;j<=i;j++){
            k*=j;
        }
        sum+=k;
    }
    printf("%d",sum);
    return 0;
}

7-5 谷歌的招聘

分数 20

全屏浏览题目

作者 陈越

单位 浙江大学

2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。

自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921... 其中粗体标出的 10 位数就是答案。

本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。

输入格式:

输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。

输出格式:

在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。

输入样例 1:

20 5
23654987725541023819

输出样例 1:

49877

输入样例 2:

10 3
2468001680

输出样例 2:

404

鸣谢用户 大冰 补充数据!

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

C++ (g++)

#include <iostream>
using namespace std;
#include <string>
#include <cmath>

bool isprime(int n)//判断素数
{
    if(n<2)
        return false;
    for(int i=2;i<=sqrt(n);i++)
        if(n%i==0)
            return false;
    return true;
}
int main()
{
    int L,K;
    cin>>L>>K;
    string str,temp;
    cin>>str;
    int num,flag=0;
    for(int i=0;i<=L-K;i++)
    {
        temp=str.substr(i,K);//将K位子串复制到temp中
        num=stoi(temp);
        if(isprime(num))
        {
            cout<<temp;//注意,这里输出是K位,即0023不能输出成23
            flag=1;
            break;
        }
    }
    
    if(flag==0)
        cout<<404;
}

 7-1 输出学生成绩

分数 20

全屏浏览题目

作者 张泳

单位 浙大城市学院

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩

结果均保留两位小数。

输入样例:

3
85 90 95

输出样例:

average = 90.00
max = 95.00
min = 85.00

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main(){
    int n;
    scanf("%d\n",&n);
    int i;
    double a[n],max,min,s=0,ave;
    for(i=0;i<n;i++){
        scanf("%lf",&a[i]);
        s+=a[i];
        if(i==0){
            max=a[i];
            min=a[i];
        }
        if(a[i]>max)
            max=a[i];
        if(a[i]<min)
            min=a[i];
    }
    ave=1.0*s/n;
    printf("average = %.2f\n",ave);
    printf("max = %.2f\n",max);
    printf("min = %.2f",min);
    return 0;
}

7-2 平面向量加法

分数 15

全屏浏览题目

作者 乔林

单位 清华大学

本题要求编写程序,计算两个二维平面向量的和向量。

输入格式:

输入在一行中按照“x1​ y1​ x2​ y2​”的格式给出两个二维平面向量v1​=(x1​,y1​)和v2​=(x2​,y2​)的分量。

输出格式:

在一行中按照(x, y)的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)。

输入样例:

3.5 -2.7 -13.9 8.7

输出样例:

(-10.4, 6.0)

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
int main()
{
	double x1,x2,y1,y2,k1,k2;
	scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
	k1=x1+x2;k2=y1+y2;
	if(k1<=-0.00&&k1>=-0.05)
	k1=-k1;
	if(k2<=-0.00&&k2>=-0.05)
	k2=-k2;
	printf("(%.1lf, %.1lf)",k1,k2);
	return 0;
}

7-3 查找书籍

分数 20

全屏浏览题目

作者 C课程组

单位 浙江大学

给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

输入格式:

输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。

输出格式:

在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。

输入样例:

3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0

输出样例:

25.00, Programming in Delphi
18.50, Programming in VB

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
#include<string.h>
struct book{
	char name[100];
	double price;
}min,max,now;
int main(void)
{
	int i,n;
	min.price =999999;
	max.price =0;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		getchar();
		gets(now.name );
		scanf("%lf",&now.price );
		if(min.price >now.price ){
			strcpy(min.name,now.name);
			min.price =now.price ;
		}
		if(max.price <now.price ){
			strcpy(max.name,now.name);
			max.price =now.price ;
		}
	}
	printf("%.2f, %s\n",max.price ,max.name );
	printf("%.2f, %s\n",min.price ,min.name );
	return 0;
}

7-4 通讯录排序

分数 20

全屏浏览题目

作者 C课程组

单位 浙江大学

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:

输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+-组成的字符串。

输出格式:

按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:

3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

输出样例:

wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
struct menber{
    char name[11];
    int birthday;
    char telephone[20];
}menber; 
int main()
{
    int n,i,j;
    struct menber a[10], temp;
    temp.birthday = -1;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s %d %s",&a[i].name,&a[i].birthday,&a[i].telephone);
    }
    //冒泡排序
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j].birthday>a[j+1].birthday){
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    for(i=0;i<n;i++){
        printf("%s %d %s\n",a[i].name,a[i].birthday,a[i].telephone);
        }
    return 0; 
}

7-5 有理数比较

分数 10

全屏浏览题目

作者 乔林

单位 清华大学

本题要求编写程序,比较两个有理数的大小。

输入格式:

输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。

输出格式:

在一行中按照“a1/b1 关系符 a2/b2”的格式输出两个有理数的关系。其中“>”表示“大于”,“<”表示“小于”,“=”表示“等于”。

输入样例1:

1/2 3/4

输出样例1:

1/2 < 3/4

输入样例2:

6/8 3/4

输出样例2:

6/8 = 3/4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main(void)
{
    int a1,b1,a2,b2;
    scanf("%d/%d %d/%d",&a1,&b1,&a2,&b2);
    if(a1*1.0/b1>a2*1.0/b2)
        printf("%d/%d > %d/%d",a1,b1,a2,b2);
    else if(a1*1.0/b1<a2*1.0/b2)
        printf("%d/%d < %d/%d",a1,b1,a2,b2);
    else
        printf("%d/%d = %d/%d",a1,b1,a2,b2);
    return 0;
}

7-1 组合数的和

分数 10

全屏浏览题目

作者 陈越

单位 浙江大学

给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。

输入格式:

输入在一行中先给出 N(1 < N < 10),随后一行给出 N 个不同的非 0 个位数字。数字间以空格分隔。

输出格式:

输出所有可能组合出来的2位数字的和。

输入样例:

3
2 8 5

输出样例:

330

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

#include<stdio.h>
int main()
{
	int n,i,j,sum=0;
	scanf("%d",&n);
	int a[n];
	for (i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	} 
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			if(j!=i)
			{
				sum+=a[i]*10;
				sum+=a[j];
			}
	}
	printf("%d",sum);
	return 0;
} 	

 

  • 14
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值