CF#660 B - Captain Flint and a Long Voyage

题意:给一个数字n,要求n位数的十进制数r转化为二进制数k删掉末位的n位后最大,如果有多个正解,取最小的那个。

题解:k要最大所以k的每个位为8或9。(1000)2 ,(1001)2.要删掉的话,8和9都没有区别。要最小,所以涉及到被删就是8。所以要 (n-1)/4+1 个8,n-((n-1)/4+1) 个9.

输入样例:

2
1
3

输出样例:

8
998

代码:

#include 
#include 

using namespace std;

int main() {
    int n;
    cin >> n;
    while (n--) {
        int x, y, t;
        cin >> t;
        x = t - ((t - 1) / 4 + 1);
        y = ((t - 1) / 4 + 1);
        for (int i = 0; i < x; i++)cout << "9";
        for (int i = 0; i < y; i++)cout << "8";
        cout << endl;
    }
    return 0;
}

 

你可能感兴趣的:(CF#660 B - Captain Flint and a Long Voyage)