9.2练习题2 汪老师玩卡片 题解

题目出处:洛谷 P2192

题目描述

汪老师得到了一些卡片,这些卡片上标有数字0或5。现在他可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被90整除这个条件。同时这个数不能含有前导0,即0不能作为这串数的首位。如果不能排出这样的数,输出“-1”。

输入格式

第一行,卡片的个数 \(n(1 \lt n \le 1000)\)
第二行,分别给出了这n个数(只能为数字5或0)。

输出格式

仅一行,如果可以排出,则输出这个数。否则输出“-1”。

样例输入1

4
5 0 5 0

样例输出1

0

样例输入2

11
5 5 5 5 5 5 5 5 0 5 5

样例输出2

5555555550

题目分析

这道题目是一道比较基础的模拟题。
首先,我们能够使用的数字只有 \(0\)\(5\) ,并且还要求组成的数字能够被 \(9\) 整除。
这就要求我们至少有一个 \(0\) ,以及 \(9\) 的倍数个 \(5\)
所以我们开两个变量:

  • 变量 \(c0\) 用于记录汪老师拥有的卡片 \(0\) 的数量;
  • 变量 \(c5\) 用于记录汪老师拥有的卡片 \(5\) 的数量。

这两个数值只需要在输入的时候进行一下统计就可以了。
然后我们需要根据 \(c0\)\(c5\) 来进行统计。

  • 如果 \(c0 = 0\) ,则直接输出“-1”;
  • 如果 \(c0 \gt 0\)\(c5 < 9\) ,则直接输出“0”;
  • 否则,我们令 \(k\)\(c5\) 整除 \(9\) 的结果,我们先循环 \(k\) 次,每次输出9个连续的“555555555”,然后循环 \(c0\) 次,每次输出一个“0”。

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, c0, c5, a;
int main() {
    cin >> n;
    while (n --) {
        cin >> a;
        (a == 0) ? (c0 ++) : (c5 ++);
    }
    c5 /= 9;
    if (!c0) cout << "-1";
    else if (!c5) cout << "0";
    else {
        while (c5 --) cout << "555555555";
        while (c0 --) cout << "0";
    }
    return 0;
}

posted @ 2019-09-15 20:47  zifeiynoip  阅读(228)  评论(0编辑  收藏  举报