【发布时间】:2020-09-11 22:27:54
【问题描述】:
您好,我是编程初学者,正在学习数组课程,我只知道一些基础知识,例如 if 条件、循环和数据类型,以及当我尝试解决这个问题时。
问题描述
Serezha 三岁时,收到了一套带有字母的生日卡片。它们以二进制形式形成男孩母亲最喜欢的数字的方式排列成单词。 Serezha 立即开始和他们一起玩,并把他们洗牌,因为他还不会阅读。他的父亲决定重新安排他们。帮助他恢复原来的数字,条件是它是最大可能的。
输入规范
第一行包含一个整数 n (1⩽n⩽105) — 字符串的长度。第二行包含一个由英文小写字母组成的字符串:'z'、'e'、'r'、'o'和'n'。
保证可以重新排列字母,使它们形成一个单词序列,每个单词要么是对应于数字 00 的“零”,要么是对应于数字 11 的“一”。
输出规格
以二进制形式打印最大可能的数字。打印以空格分隔的二进制数字。允许前导零。
-
示例输入:
4 ezor输出:
0 -
示例输入:
10 nznooeeoer输出:
1 1 0
我在测试 10 个代码强制时超出了时间限制,这就是我的代码
#include <iostream>
using namespace std;
int main()
{
int n;
char arr[10000];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
for (int i = 0; i < n; i++) {
if (arr[i] == 'n') {
cout << "1"
<< " ";
}
}
for (int i = 0; i < n; i++) {
if (arr[i] == 'z') {
cout << "0"
<< " ";
}
}
}
【问题讨论】:
-
每个输入都有固定数量的 1 和 0。弄清楚你需要知道什么才能得到这个数字。您当然不需要存储一个充满
o和e字符的数组。