天梯赛 L1-058 6翻了 (15 分)

本文探讨了网络用语‘666’的演变,介绍了数字9和27的新含义,并提供了一段编程代码实现句子中连续6的转换。揭示了从初级到高级表达的升级过程。

天梯赛 L1-058 6翻了 (15 分)


题目

在这里插入图片描述
“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!
本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出格式:

从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

测试样例

输入样例:

it is so 666 really 6666 what else can I say 6666666666

输出样例:

it is so 666 really 9 what else can I say 27

简单分析:

  • 不能用stringstream来做
  • 暴力做法,如果有6就记录位数,判断后再依次遍历记录输出

代码:

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;


int main() {
	string a;
	getline(cin, a);

	for (int i = 0; i < a.size(); i++) {
		int cnt = 0;
		while (a[i] == '6') {
			cnt++;
			i++;
		}
		if (cnt > 9) cout << 27;
		else if (cnt > 3) cout << 9; // 肯定小于等于9
		else cout << string(cnt, '6');
		cout << a[i];
	}
	puts("");

	return 0;
}

感悟

参考了大佬的,茅塞顿开啊

参考

参考

### 天梯赛 L1-049 座位配问题解析 天梯赛 L1-049 题目“座位配”是一个考察队列操作与模拟逻辑的编程题。题目要求为多个学校的参赛队伍配座位,确保同一学校的选手按照顺序入座,并且不同学校的选手不能相邻。当只剩下一个学校的选手时,需要隔位就坐。 #### 题目核心逻辑 1. **输入处理**: - 输入包含多个学校的队伍数量,每个学校每队有 10 名选手。 - 需要将所有选手按照顺序配座位,座位编号从 1 开始。 2. **队列模拟**: - 每个学校的所有选手应排成一列纵队。 - 各校的第 1 位选手依次入座,然后是第 2 位,依此类推。 - 当只剩下一个学校时,该学校的剩余选手必须隔位就坐。 3. **输出要求**: - 每个选手的座位号按学校和队伍顺序输出。 #### 算法实现思路 可以使用一个**队列数组**来模拟每个学校的选手队列。具体步骤如下: 1. **初始化队列**: - 每个学校建立一个队列,队列中依次加入该学校所有队伍的选手(每队 10 人)。 2. **模拟配过程**: - 使用一个循环,每次从每个学校的队列中取出一个选手进行配。 - 如果某个学校的队列为空,则跳过。 - 如果只剩下一个非空队列,则开始“隔位就坐”模式。 3. **座位编号处理**: - 座位号从 1 开始递增。 - 在“隔位就坐”模式下,每次配后跳过一个座位。 #### 示例代码 以下是一个基于上述逻辑的 C++ 实现示例: ```cpp #include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<queue<int>> schools(n); int total = 0; for (int i = 0; i < n; ++i) { int m; cin >> m; for (int j = 0; j < m * 10; ++j) { schools[i].push(i + 1); // 标记学校编号 } total += m * 10; } vector<vector<int>> result(n); // 每个学校选手的座位号 int seat = 1; int remaining = n; while (total--) { bool hasPlayer = false; for (int i = 0; i < n; ++i) { if (!schools[i].empty()) { hasPlayer = true; if (remaining > 1) { result[i].push_back(seat++); schools[i].pop(); } else { result[i].push_back(seat); schools[i].pop(); seat += 2; // 隔位就坐 } } } if (hasPlayer) { remaining = 0; for (int i = 0; i < n; ++i) { if (!schools[i].empty()) remaining++; } } } for (int i = 0; i < n; ++i) { for (int j = 0; j < result[i].size(); ++j) { cout << result[i][j] << " "; } cout << endl; } return 0; } ``` #### 关键点说明 - **队列管理**:使用 `queue` 结构管理每个学校的选手队列,便于模拟“先进先出”的配逻辑。 - **隔位就坐**:当只剩一个学校未配完时,使用 `seat += 2` 实现隔位就坐。 - **输出格式**:按照学校顺序输出每个选手的座位号。 #### 总结 L1-049 是一个典型的模拟题,考察的是对队列、循环控制和条件判断的综合运用。掌握这种类型的题目有助于提升编程思维和算法设计能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值