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");
    }
}

 

posted @ 2020-08-05 21:45  remarkableboy  阅读(125)  评论(0编辑  收藏  举报