Captain Flint and a Long Voyage
题意
对于一个
n
n
n位数,进行两次操作,首先将数字的每一位转换为二进制,随后删去最后
n
n
n个数,最终得到的即为数
r
r
r
题目输入数字的位数,要求你给出
r
r
r最大的最小
n
n
n位数
思路
显然,假若要使得
r
r
r最大,转换出的二进制数越长越好
在数字
0
−
9
0-9
0−9中,转换为
2
2
2进制数最长的只有
8
,
9
8,9
8,9
9-----1001
8-----1000
所以最终的结果必定是由
9
9
9与
8
8
8组成
因为我们会删除转换为
2
2
2进制数的最后
n
n
n位数,所以对于原
n
n
n位数转化的二进数,最后
n
n
n位数转换之前无论是
8
8
8,或者是
9
9
9,输出的结果均为一样的
如
对于2位数
99–10011001–输出100110
98-10011000 -输出100110
对于3位数
999–100110011001–输出100110011
998–100110011000–输出100110011
所以我们只需要输出的最后 ⌈ n 4 ⌉ \left \lceil \frac{n}{4}\right \rceil ⌈4n⌉个数是8即可
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
int _;
scanf("%d", &_);
while (_--) {
scanf("%d", &n);
int k = (n + 3) / 4;
for (int i = 1; i <= n - k; i++)
printf("9");
for (int i = 1; i <= k; i++)
printf("8");
printf("\n");
}
}