codeforces 1647A Madoka and Math Dad

Madoka finally found the administrator password for her computer. Her father is a well-known popularizer of mathematics, so the password is the answer to the following problem.

Find the maximum decimal number without zeroes and with no equal digits in a row, such that the sum of its digits is nn.

Madoka is too tired of math to solve it herself, so help her to solve this problem!

Input

Each test contains multiple test cases. The first line contains a single integer tt (1≤t≤10001≤t≤1000) — the number of test cases. Description of the test cases follows.

The only line of each test case contains an integer nn (1≤n≤10001≤n≤1000) — the required sum of the digits.

Output

For each test case print the maximum number you can obtain.

Example

input

Copy

5
1
2
3
4
5

output

Copy

1
2
21
121
212


题意:
给你一个数字n,请找出一个十进制的数,十进制的各位数之和等于n,该十进制数不能有零出现,同时相邻两个数之间不能有重复,并且尽可能让这个十进制的数大,你的输出是最大的那个值。

例如 3
它的组合有 111, 21, 12。111有相邻重复出现的情况不符合题意,21>12,所以你最终的答案是21。


题解:
因为题目要求我们的数字尽可能的大,而且不能有连续重复的数字,所以我们让我们的答案尽可能的位数变多就可以了(而不是让每一位最大比如9,一个9我们可以3组(2,1)位数就多了五位显然最后的答案更大了),那么最关键的就是我们怎样使我们的答案位数最长且没有重复呢?那么我们就可以采取让1,2这两个数字重复出现,来符合我们得要求

接下来就是让谁来第一个出现的问题了,因为我们相当于将n能分成多少个3然后余下几的问题,并且我们要让我们的数最大,肯定是让2优先出现最好了,但是你如果是2 1组合的话你最后如果余下的那个数是1,你最后一个出现的数字一定是1,那么最后就是(1,1)不满足题意,如果余数是2或者0,那么2 1组合将没有问题,所以当n%3 = 1, 我们就是1 2 组合就是了。


#include

#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)

using namespace std;

typedef long long ll;

const int N = 1e5 + 10;

int n, m, t;
int arr[N];

void solve()
{
     int s;
     cin >> n;
     if(n % 3 == 1) s = 1;
     else
          s = 2;
     while(n){
          cout << s;
          n -= s;
          s -= 3;
          s = abs(s);
     }
     cout << endl;
}

int main()
{
     IOS;
     cin >> t;
     while(t--)
          solve();
     return 0;
}

你可能感兴趣的:(c++)