2020 年 6 月青少年软编等考 C 语言一级真题解析

目录

  • [T1. 鸡尾酒疗法](#T1. 鸡尾酒疗法)
  • [T2. 判断是否存在重复的数](#T2. 判断是否存在重复的数)
  • [T3. 日期输出](#T3. 日期输出)
  • [T4. 计算表达式的值](#T4. 计算表达式的值)
  • [T5. 与指定数字相同的数的个数](#T5. 与指定数字相同的数的个数)

T1. 鸡尾酒疗法

题目链接:SOJ D1426

鸡尾酒疗法,原指高效抗逆转录病毒治疗 (HAART),由美籍华裔科学家何大一于 1996 1996 1996 年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾滋病。该疗法的应用可以减少单一用药产生的抗药性,最大限度地抑制病毒的复制,使被破坏的机体免疫功能部分甚至全部恢复,从而延缓病程进展,延长患者生命,提高生活质量。

人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进行。

假设鸡尾酒疗法的有效率为 x x x,新疗法的有效率为 y y y,如果 y − x y-x y−x 大于 5 % 5\% 5%,则效果更好,如果 x − y x-y x−y 大于 5 % 5\% 5%,则效果更差,否则称为效果差不多。

下面给出 n n n 组临床对照实验,其中第一组采用鸡尾酒疗法,其他 n − 1 n-1 n−1 组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。

时间限制:1 s

内存限制:64 MB

  • 输入
    第一行为整数 n n n( 1 < n ≤ 20 1<n \le 20 1<n≤20);
    其余 n n n 行每行两个整数,第一个整数是临床实验的总病例数(小于等于 10000 ) 10000) 10000),第二个疗效有效的病例数。
    这 n n n 行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。

  • 输出
    有 n − 1 n-1 n−1 行输出,分别表示对应改进疗法的效果:如果效果更好,输出 better;如果效果更差,输出 worse;否则输出 same

  • 样例输入

    a 复制代码
    5
    125 99
    112 89
    145 99
    99 97
    123 98
  • 样例输出

    a 复制代码
    same
    worse
    better
    same

思路分析

此题考察循环结构,属于入门题。

首先输入三个整数 n , a , b n,a,b n,a,b,其中 a , b a,b a,b 就是第一行鸡尾酒疗法的数据,并据此计算出鸡尾酒疗法的有效率 x = b / a x = b / a x=b/a。注意由于 a , b a,b a,b 都是整数,在 C++ 中直接计算 b / a 会进行整除运算,应当写成表达式 1.0 * b / a,利用自动类型转换来达到浮点数除法的目的。

然后依次输入 n − 1 n-1 n−1 个改进疗法的数据,并计算出有效率 y y y。之后根据题意判断改进疗法的疗效更优、更劣或相同即可。

cpp 复制代码
/*
 * Name: T1.cpp
 * Problem: 鸡尾酒疗法
 * Author: Teacher Gao.
 * Date&Time: 2026/01/10 01:10
 */

#include <cstdio>

int main() 
{
    int n, a, b;
    scanf("%d %d %d", &n, &a, &b);

    double x = 1.0 * b / a;
    for (int i = 1; i < n; i++) {
        scanf("%d %d", &a, &b);
        double y = 1.0 * b / a;

        if(y - x >= 0.05) {
            printf("better\n");
        }
        else if(x - y >= 0.05) {
            printf("worse\n");
        }
        else {
            printf("same\n");
        }
    }
    
    return 0;
}

T2. 判断是否存在重复的数

题目链接:SOJ D1221

给定 3 3 3 个数,判断是否存在 2 2 2 个数相等,如果存在输出 YES,否则输出 NO

时间限制:1 s

内存限制:64 MB

  • 输入
    1 1 1 行,包含 3 3 3 个整数,以空格分隔。

  • 输出
    按照题目要求输出结果。

  • 样例输入

    a 复制代码
    2 7 2
  • 样例输出

    a 复制代码
    YES

思路分析

此题考察分支结构与逻辑运算,属于入门题。

此题只需要按照题意判断是否存在 2 2 2 个数相等即可。需要注意的是,输入的有 3 3 3 个数,所以会有 3 3 3 种不同的情况,任意一种成立即可。

cpp 复制代码
/*
 * Name: T2.cpp
 * Problem: 判断是否存在重复的数
 * Author: Teacher Gao.
 * Date&Time: 2024/03/04 23:14
 */

#include <iostream>

using namespace std;

int main()
{
	int a, b, c;
	cin >> a >> b >> c;

	if (a == b || a == c || b == c) {
		cout << "YES" << endl;
	}
	else {
		cout << "NO" << endl;
	}

	return 0;
}

T3. 日期输出

题目链接:SOJ D1260

给定两个整数,表示一个日期的月和日。请按照 "MM-DD" 的格式输出日期,即如果月和日不到 2 2 2 位时,填补 0 0 0 使得满足 2 2 2 位。

时间限制:1 s

内存限制:64 MB

  • 输入
    2 2 2 个整数 m , d m,d m,d( 0 < m ≤ 12 , 0 < d ≤ 31 0 < m \le 12, 0 < d \le 31 0<m≤12,0<d≤31)。数据保证日期合法。

  • 输出
    按照题目要求输出日期

  • 样例输入

    a 复制代码
    7 18
  • 样例输出

    a 复制代码
    07-18

思路分析

此题考察格式化输入输出,属于入门题。

使用格式化输出 printf("%02d", ...); 可以做到题目要求的效果。简单解释一下

  • %d 表示以十进制形式输出,这是我们常用的格式。
  • %2d 表示以十进制形式输出,场宽为 2 2 2(输出数字所占用的最小长度为 2 2 2),不足 2 2 2 位的数则右对齐输出,左侧自动补充空格,超出 2 2 2 位的数按实际数字输出。
  • %02d 表示以十进制形式输出,场宽为 2 2 2,不足 2 2 2 位的数则右对齐输出,左侧自动补 0,超出 2 2 2 位的数按实际数字输出。

此外,使用 cout << setfill('0') << setw(2) << ...; 也可以达到题目要求的效果。其中 setfill('0') 表示设置填充字符为 '0'setw(2) 表示设置场宽为 2 2 2,默认右对齐输出。

cpp 复制代码
/*
 * Name: T3.cpp
 * Problem: 日期输出
 * Author: Teacher Gao.
 * Date&Time: 2024/02/28 22:50
 */

#include <cstdio>

using namespace std;

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
	
    printf("%02d-%02d", a, b);

    return 0;
}

T4. 计算表达式的值

题目链接:SOJ D1253

给定整数 x x x、 y y y 的值,计算 3 × x + 2 × y 3 \times x+2 \times y 3×x+2×y 的值。

时间限制:1 s

内存限制:64 MB

  • 输入
    一行包含 2 2 2 个整数 x , y x,y x,y,以空格作为分隔。数据保证最后计算结果还在整数表示范围内。

  • 输出
    按照题目要求输出结果。

  • 样例输入

    a 复制代码
    2 3
  • 样例输出

    a 复制代码
    12

思路分析

此题考察基本输入输出与算术运算,属于入门题。按照题意输入 xy,然后输出 3*x + 2*y 即可。

cpp 复制代码
/*
 * Name: T4.cpp
 * Problem: 计算表达式的值
 * Author: Teacher Gao.
 * Date&Time: 2024/02/29 03:10
 */

#include <iostream>

using namespace std;

int main()
{
    int x, y;
    cin >> x >> y;

    cout << 3*x + 2*y;

    return 0;
}

T5. 与指定数字相同的数的个数

题目链接:SOJ D1427

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

时间限制:1 s

内存限制:64 MB

  • 输入
    输入包含 2 2 2 行:
    第一行为 n n n 和 m m m,表示整数序列的长度( n ≤ 100 n \le 100 n≤100)和指定的数字,中间用一个空格分开。
    第二行为 n n n 个整数,整数之间以一个空格分开。

  • 输出
    输出为 n n n 个数中与 m m m 相同的数的个数。

  • 样例输入

    a 复制代码
    3 2
    2 3 2
  • 样例输出

    a 复制代码
    2

思路分析

此题考察循环结构与分支结构,属于入门题。

此题只需要将输入的 n n n 个整数依次与 m m m 进行比较即可。设置一个计数器变量 t o t tot tot 进行统计,如果输入的整数和 m m m 相等,则 t o t tot tot 加 1 1 1,注意 t o t tot tot 需要初始化为 0 0 0。

cpp 复制代码
/*
 * Name: T5.cpp
 * Problem: 与指定数字相同的数的个数
 * Author: Teacher Gao.
 * Date&Time: 2026/01/10 01:33
 */

#include <iostream>

using namespace std;

int main()
{
    int n, m, x, tot = 0;
	
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> x;
        if (x == m) {
            tot++;
        }
    }

    cout << tot << endl;

    return 0;
}
相关推荐
橘子师兄2 分钟前
C++AI大模型接入SDK—ChatSDK封装
开发语言·c++·人工智能·后端
Christo35 分钟前
TFS-2026《Fuzzy Multi-Subspace Clustering 》
人工智能·算法·机器学习·数据挖掘
上天_去_做颗惺星 EVE_BLUE17 分钟前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境
2401_8576835418 分钟前
C++中的原型模式
开发语言·c++·算法
s1hiyu27 分钟前
C++动态链接库开发
开发语言·c++·算法
(❁´◡`❁)Jimmy(❁´◡`❁)28 分钟前
CF2188 C. Restricted Sorting
c语言·开发语言·算法
We་ct28 分钟前
LeetCode 54. 螺旋矩阵:两种解法吃透顺时针遍历逻辑
前端·算法·leetcode·矩阵·typescript
星火开发设计33 分钟前
C++ 预处理指令:#include、#define 与条件编译
java·开发语言·c++·学习·算法·知识
许泽宇的技术分享35 分钟前
第 1 章:认识 Claude Code
开发语言·人工智能·python
45288655上山打老虎35 分钟前
QFileDialog
c++