信息奥赛题解|Excel
🚀 题目浏览
【题目描述】
有天小 C 在操作 excel,他发现一个有意思的事情:对数字单元进行下拉可以得到递增的序列,对含有数字的单元格同样有效果。
作为一名立志成为 ACM 大牛的小 C 开始思考如何用C语言实现这个功能。那么作为 ACMer的你会选择怎么来实现这个功能呢?
【输入】
每组测试数据有一行,一个含有英文字母和数字的字符串和一个整数 $m$,$m$ 表示下拉 $m$ 个单元格。
【输出】
输出 $m+1$ 行,表示下拉 $m$ 个单元格的结果。
【输入样例】
abc123de 3
【输出样例】
abc123de
abc124de
abc125de
abc126de
☘️ 题解分析
考察字符串的处理。
注意 C++ 中 stoi()
函数 与 s.substr(pos, n)
方法的使用。
🧑🏻💻 C++ 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
string s;
int main() {
cin >> s >> n;
// 获取整数所在的起点与终点
int st, ed, flag = 1;
for (int i = 0; i < s.size(); i++) {
if (isdigit(s[i]) && flag) {
st = i, flag = 0;
while (isdigit(s[i])) i++;
ed = i; // 获取终点后一个位置,方便使用substr截取
break;
}
}
// 截取数字
// stoi函数可以将string转为int
// substr(pos, n)的第二个参数需要注意
int x = stoi(s.substr(st, ed - st));
// 下拉输出
for (int i = 0; i <= n; i++) {
for (int j = 0; j < st; j++) cout << s[j];
cout << to_string(x + i);
for (int j = ed; j < s.size(); j++) cout << s[j];
cout << endl;
}
return 0;
}