2024 年 3 月青少年软编等考 C 语言六级真题解析

目录

  • T1. 小白鼠再排队
    • 思路分析
  • T2. 括号匹配问题
    • 思路分析
  • T3. stack or queue
    • 思路分析
  • T4. 利用队列进行数字排序
    • 思路分析

T1. 小白鼠再排队

题目链接:SOJ D1172

n n n 只小白鼠( 1 < n < 100 1 < n < 100 1<n<100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 redblue 等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。

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

  • 输入
    输入第一行为一个整数 n n n,表示小白鼠的数目。
    下面有 n n n 行,每行是一只白鼠的信息。第一个为正整数,表示白鼠的重量,不超过整型范围;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过 10 10 10 个字符。
    注意:白鼠的重量各不相同。
  • 输出
    按照白鼠的重量从小到大的顺序输出白鼠的帽子颜色。
  • 样例输入
    3
    30 red
    50 blue
    40 green
    
  • 样例输出
    red
    green
    blue
    

思路分析

此题考查排序算法,属于入门题。

由于数据量较小,可以采用任意时间复杂度为 O ( n 2 ) O(n^2) O(n2) 的算法,更好的方式是采用结构体排序,具体参考示例代码

/*
 * Name: T1.cpp
 * Problem: 小白鼠再排队
 * Author: Teacher Gao.
 * Date&Time: 2024/11/14 19:06
 */

#include 
#include 

using namespace std;

struct ret {
   
   
	int weight;
	string hat;
}a[105];

bool cmp(ret a, ret b) {
   
   
	return a.weight < b.weight;
}

int main()
{
   
   
	int n;

	cin >> n;
	for (int i = 1; i <= n; i++) {
   
   
		cin >> a[i].weight >> a[i].hat;
	}

	sort(a + 1, a + n + 1, cmp);

	for (int i = 1; i <= n; i++) {
   
   
		cout << a[i].hat << endl;
	}

	return 0;
}

T2. 括号匹配问题

题目链接:SOJ D1012

在某个字符串(长度不超过 100 100 100)中有左括号、右括号和大小写字母;规定(与常见的算术式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用 $ 标注,不能匹配的右括号用 ? 标注。

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

  • 输入
    输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过 100 100 100
  • 输出
    对每组输出数据,输出两行,第一行包含原始输入字符串,第二行由 $? 和空格组成,$? 表示与之对应的左括号和右括号不能匹配。
  • 样例输入
    ((ABCD(x)
    )(rttyy())sss)(
    
  • 样例输出
    ((ABCD(x)
    $$
    )(rttyy())sss)(
    ?            ?$
    

思路分析

此题考查模拟法与栈操作,属于基础题。

对于括号匹配问题,我们可以用栈进行模拟操作,具体来说:

  • 若遇到左括号 (,则入栈,注意入栈元素是左括号的下标,这是为了方便后面的标记;
  • 若遇到右括号 ),则检测栈是否为空,若不空,则弹出栈顶元素,否则将该右括号标记为不匹配;
  • 当字符串遍历完毕之后,若栈中还有元素,则将栈中左括号标记为不匹配。

为了方便输出,这里将标记数组定义为一个空格字符串,长度与输入的字符串保持一致。

/*
 * Name: T2.cpp
 * Problem: 括号匹配问题
 * Author: Teacher Gao.
 * Date&Time: 2024/11/16 15:34
 */

#include 
#include 
#include 

using namespace std;

int main()
{
   
   
    string s;
    while (cin >> s) {
   
   
        string f(s.size(), ' ');
        stack<int

你可能感兴趣的:(青少年软编等考,C,语言题解集(六级),c语言,开发语言,算法,学习,青少年编程,栈,队列)