SZTUOJ 1017.火柴人

Posted 徒手拆机甲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SZTUOJ 1017.火柴人相关的知识,希望对你有一定的参考价值。

Description

今天,你买了一盒火柴,打算和同学比拼谁能用有限的火柴得到一个最大数字。火柴拼数字规则是,拼出零到九分别需要6、2、5、5、4、5、6、3、7、6个火柴。我们会给你n个不同火柴数,求问不同的火柴数分别最多能组成多大的数字。如果不能组成数字,输出-1。 对于某个特定的火柴数a,求出其能组成的最大的数字

Input

第一行输入一个n,接下来n行每行一个个数a,0<=a<=2^31-1

Output

每行输出一个能组成的最大数字。

Sample Input

3
1
2
4

Sample Output

-1
1
11

Hint

火柴要省着用

Source

SZTU Monthly 2020 Oct.

Author

徒手拆机甲

题目解析

这道题是我出的,题解直接搬过来就好了,这道题目需要考虑一个很显然的贪心策略,即1如果用于进位,他的价值相当于把当前数字乘10+当前数字本身,所以只要有2个火柴我们就尽可能选择1进行输出。而如果给的火柴数是奇数,说明我们按上述策略会留下一根火柴,我们可以发现7和1需要的火柴数只差1根,所以我们可以把位于最高位的1换成7.是一个很基础的贪心题,有时候这种题就需要一些大胆,需要一点思维。

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int t,n;
        cin >> t;
        while(t--) {
            cin >> n;
            if(n<=1) printf("-1"),n=0;
            if(n & 1) printf("7"), n -= 3;
            while(n) printf("1"), n -= 2;
            printf("\\n");
        }
        return 0;
    }

以上是关于SZTUOJ 1017.火柴人的主要内容,如果未能解决你的问题,请参考以下文章

2018 女生赛 F - 赛题分析

SZTUOJ 1009.打怪升级

SZTUOJ 1014.RMQ with Shifts

SZTUOJ 1002. A+B(II)

SZTUOJ 1003.A+B(III)

SZTUOJ 1001. A+B (I)