2020年6月青少年软件编程等级考试(C语言)一级试卷及C语言版答案

2020年6月青少年软件编程等级考试(C语言)一级试卷及C语言版答案

编程题(共5题,共100分)

1.鸡尾酒疗法
鸡尾酒疗法,原指“高效抗逆转录病毒治疗”(HAART),由美籍华裔科学家何大一于1996年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾滋病。该疗法的应用可以减少单一用药产生的抗药性,最大限度地抑制病毒的复制,使被破坏的机体免疫功能部分甚至全部恢复,从而延缓病程进展,延长患者生 命,提高生活质量。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式 进行。假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y-x大于5%,则效果更好,如果x-y大于5%,则效果更差,否则称为效果差不多。下面给 出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他n-1组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。

输入
第一行为整数n( 1 < n <= 20);其余n行每行两个整数,第一个整数是临床实验的总病例数(小于等于10000),第二个疗效有效的病例数。这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。
输出
有n-1行输出,分别表示对应改进疗法的效果:如果效果更好,输出better;如果效果更差,输出worse;否则输出same
样例输入
5
125 99
112 89
145 99
99 97
123 98
样例输出
same
worse
better
same

程序范例

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);//数据组数
	int p,q;
	scanf("%d%d",&p,&q);//旧疗法数据
	double t=(double)q/p;//旧疗法有效率
	for(int i=1;i<=n-1;i++)
	{
	    int x,y;
		scanf("%d%d",&x,&y);//新疗法数据
		double  s=(double)y/x;//新疗法有效率
		if(s>t+0.05)//比对效果
			printf("better\n");//相应输出
		else if(s<t-0.05)
			printf("worse\n");
		else
		    printf("same\n");
	}
	return 0;
}

2.判断是否存在重复的数
给定3个数,判断是否存在2个数相等,如果存在输出"YES", 否者输出"NO"。

输入
1行,包含3个整数,以空格分隔。
输出
按照题目要求输出结果
样例输入
2 7 2
样例输出
YES

程序范例

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	if(a==b||b==c||c==a)
		printf("YES");
	else
		printf("NO");
	return 0;
}

3.日期输出
给定两个整数,表示一个日期的月和日。请按照"MM-DD"的格式输出日期,即如果月和日不到2位时,填补0使得满足2位。
时间限制:10000
内存限制:65536
输入
2个整数m,d(0 < m <= 12, 0 < d <= 31)。
数据保证日期合法。
输出
按照题目要求输出日期
样例输入
7 18
样例输出
07-18

程序范例

#include<stdio.h>
int main()
{
	int m,d;
	scanf("%d%d",&m,&d);
	printf("%02d-%02d",m,d);
	return 0;
}

4.计算表达式的值
给定整数x,y的值,计算3x+2y的值。

输入
一行包含2个整数x,y,以空格作为分隔。数据保证最后计算结果还在整数表示范围内。
输出
按照题目要求输出结果
样例输入
2 3
样例输出
12

程序范例

#include<stdio.h>
int main()
{
	int x,y;
	scanf("%d%d",&x,&y);
	printf("%d",3*x+2*y);
	return 0;
}

5.与指定数字相同的数的个数
输出一个整数序列中与指定数字相同的数的个数。

输入
输入包含2行:第1行为N和m,表示整数序列的长度(N <= 100)和指定的数字, 中间用一个空格分开;第2行为N个整数,整数之间以一个空格分开。
输出
输出为N个数中与m相同的数的个数。
样例输入
3 2
2 3 2
样例输出
2

程序范例

#include <stdio.h>
int main()
{
	int N,m,x,s=0;
	scanf("%d%d",&N,&m);
	for (int i=1;i<=N;i++)
	{
		scanf("%d",&x);
		if(x==m)
			s++;
	}
	printf("%d",s);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖之远izxg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值