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