2022 年 12 月青少年软编等考 C 语言三级真题解析

发布于:2024-12-06 ⋅ 阅读:(87) ⋅ 点赞:(0)

目录

  • T1. 鸡兔同笼
    • 思路分析
  • T2. 猴子吃桃
    • 思路分析
  • T3. 括号匹配问题
  • T4. 上台阶
    • 思路分析
  • T5. 田忌赛马

T1. 鸡兔同笼

一个笼子里面关了鸡和兔子(鸡有 2 2 2 只脚,兔子有 4 4 4 只脚,没有例外)。已经知道了笼子里面脚的总数 a a a,问笼子里面至少有多少只动物,至多有多少只动物。

时间限制:1 s
内存限制:64 MB

  • 输入
    一行,一个正整数 a   ( a < 32768 ) a\ (a < 32768) a (a<32768)
  • 输出
    一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。如果没有满足要求的答案,则输出两个 0 0 0,中间用一个空格分开。
  • 样例输入
    20
    
  • 样例输出
    5 10
    

思路分析

此题考查数学思维,属于入门题。

由于鸡和兔子的脚都是偶数,因此

  • 如果 a a a 为奇数,则没有满足要求的答案;
  • 如果 a a a 为偶数,则最少的动物数量应满足兔子数量最多,此时答案为 ⌈ a / 4 ⌉ \lceil a/4 \rceil a/4;最多的动物数量应满足鸡的数量最多,此时答案为 a / 2 a/2 a/2
/*
 * Name: T1.cpp
 * Problem: 鸡兔同笼
 * Author: Teacher Gao.
 * Date&Time: 2024/12/02 19:41
 */

#include <cstdio>

int main()
{
   
	int a;
	scanf("%d", &a);
	
	if (a % 2) 
		printf("0 0");
	else 
		printf("%d %d", (a + 3) / 4, a / 2);

	return 0;
}

T2. 猴子吃桃

海滩上有一堆桃子, n n n 只猴子来分。第一只猴子把这堆桃子平均分为 n n n 份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子接着把剩下的桃子平均分成 n n n 份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第三、第四、…… 第 n n n 只猴子仍是最终剩下的桃子分成 n n n 份,扔掉多了的一个,并拿走一份。

编写程序,输入猴子的数量 n n n,输出海滩上最少的桃子数,使得每只猴子都可吃到桃子。

时间限制:1 s
内存限制:64 MB

  • 输入
    一个整数 n n n
  • 输出
    输出当猴子数量为 n n n 时海滩上最少的桃子数。结果保证在 int 型范围内。
  • 样例输入
    2
    
  • 样例输出
    7
    

思路分析

更新于 2024/12/05:

  1. 修正此前思路分析中的错误;
  2. 给出适合小学生的解题思路。

此题考查枚举算法和递推算法,属于基础题。

递推思路一:假设第 i i i 只猴子分桃子时的总数为 s i s_i si,根据题意,第 i i i 只猴子拿走的桃子数量为 ( s i − 1 ) n \frac{(s_i - 1)}{n} n(si1),于是第 i + 1 i+1 i+1 只猴子分桃子时的总数为 s i + 1 = ( s i − 1 ) n × ( n − 1 ) s_{i+1} = \frac{(s_i - 1)}{n} \times (n-1) si+1=n(si1)×(n1)。由于知道末项,需要求解首项,因此需要转变递推式为 s i = s i + 1 × n n − 1 + 1 s_i = \frac{s_{i+1} \times n}{n-1} + 1 si=n1si+1×n+1,最终答案为 s 1 s_1 s1

递推思路二:假设第 i i i 只猴子拿走的桃子数量为 s i s_i si,根据题意,第 i + 1 i+1 i+1 只猴子分桃子时的总数为 s i × ( n − 1 ) s_i \times (n-1) si×(n1),于是第 i + 1 i+1 i+


网站公告

今日签到

点亮在社区的每一天
去签到