https://codeforces.com/contest/1467/problem/A
题意:有个长度为n初始状态下各元素均为0的数组,没过一秒数组中所有元素都会+1,如果是9则会变成0,即0-9不断循环。现在你能够在开始后的任意时间点选取任意一个位置,改位置上的数字立刻停止增加,与其距离为x的位置上的元素则在x秒后暂停(这x秒内还是数字会继续增加)。给定你长度n,求出由n个元素构成的最大数字(包含前导零)。
首先要理解暂停是向两边同时进行,不是单一方向。然后可以发现最大肯定是第一位为9,第二位为8,第三位又为9…
这里注意不是987654321…这样最大,而是98901234…,这点能理解之后就没有问题了~
#include <bits/stdc++.h>
using namespace std;
#define qc std::ios::sync_with_stdio(0);
int main() {
qc;
cin.tie(0);
int t;
cin >> t;
while (t--) {
int n;
int k = 9;
int flag = 0; // 0递减 1递增
cin >> n;
for (int i = 1; i <= n; i++) {
cout << k;
if (flag == 0) {
if (k > 8)
k--;
else if (k == 8) {
flag = 1;
}
}
if (flag == 1) {
if (k < 9)
k++;
else if (k == 9)
k = 0;
}
}
cout << endl;
}
}