目录
- [T1. 鸡尾酒疗法](#T1. 鸡尾酒疗法)
- [T2. 判断是否存在重复的数](#T2. 判断是否存在重复的数)
- [T3. 日期输出](#T3. 日期输出)
- [T4. 计算表达式的值](#T4. 计算表达式的值)
- [T5. 与指定数字相同的数的个数](#T5. 与指定数字相同的数的个数)
T1. 鸡尾酒疗法
鸡尾酒疗法,原指高效抗逆转录病毒治疗 (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。 -
样例输入
a5 125 99 112 89 145 99 99 97 123 98 -
样例输出
asame 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. 判断是否存在重复的数
给定 3 3 3 个数,判断是否存在 2 2 2 个数相等,如果存在输出 YES,否则输出 NO。
时间限制:1 s
内存限制:64 MB
-
输入
1 1 1 行,包含 3 3 3 个整数,以空格分隔。 -
输出
按照题目要求输出结果。 -
样例输入
a2 7 2 -
样例输出
aYES
思路分析
此题考察分支结构与逻辑运算,属于入门题。
此题只需要按照题意判断是否存在 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. 日期输出
给定两个整数,表示一个日期的月和日。请按照 "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)。数据保证日期合法。 -
输出
按照题目要求输出日期 -
样例输入
a7 18 -
样例输出
a07-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. 计算表达式的值
给定整数 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,以空格作为分隔。数据保证最后计算结果还在整数表示范围内。 -
输出
按照题目要求输出结果。 -
样例输入
a2 3 -
样例输出
a12
思路分析
此题考察基本输入输出与算术运算,属于入门题。按照题意输入 x 和 y,然后输出 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. 与指定数字相同的数的个数
输出一个整数序列中与指定数字相同的数的个数。
时间限制: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 相同的数的个数。 -
样例输入
a3 2 2 3 2 -
样例输出
a2
思路分析
此题考察循环结构与分支结构,属于入门题。
此题只需要将输入的 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;
}