【华为机考模拟题】Words、Vowel、计算字符串重新排列数

目录

一、Words

二、Vowel

三、计算字符串重新排列数


一、Words

每个句子由多个单词组成,句子中的每个单词的长度都可能不一样,假设每个单词的长度 Ni 为该单词的重量,你需要做的就是给出整个句子的平均重量 V

输入 : Who Love Solo
输出 :3.67

统计单词数ans和字母数count,答案就是ans/count

复制代码
int main() {
    string words;
    getline(cin, words);
    float ans = 0, count = 1;
    for (auto &c: words) {
        if (c == ' ')
            ++count;
        else
            ++ans;
    }
    cout.precision(2);
    cout << fixed << ans / count;
    return 0;
}

二、Vowel

solo 从小就对英文字母非常感兴趣,尤其是元音字母(a,e,i,o,u,A,E,I,O,U),他在写日记的时候都会把元音字母写成大写的,辅音字母则都写成小写,虽然别人看起来很别扭,但是 solo 却非常熟练。你试试把一个句子翻译成 solo 写日记的习惯吧。

输入 : Who Love Solo
输出 :whO lOvE sOlO

是元音字母的变成大写,其他的变成小写

复制代码
int main() {
    string solo = "aeiouAEIOU";
    string words;
    getline(cin, words);
    for (auto &c: words) {
        if (solo.find(c) != string::npos)
            c = toupper(c);
        else
            c = tolower(c);
    }
    cout << words;
    return 0;
}

三、计算字符串重新排列数

给定一个只包含大写英文字母的字符串 S,要求给出对 S 重新排列的所有不相同的排列数。

如:S 为 ABA,则不同的排列有 ABA、AAB、BAA 三种。

输入 : "ABA"
输出: 3

输入 : "AABBCC"
输出: 90

回顾高中数学排列组合的知识,假设没有相同的字符,如ABCD,那么排列数就是全排列A44,即!4,如果有相同字符,那么我们实际上是多乘了一个排列数,这个排列数的存在是因为我们把相同的字符当成不同的字符来排列,因此我们再计算一次这个排序数,即相同字符的排序数,当成不同字符来计算,然后除去这个数

复制代码
#include<iostream>
#include<map>
using namespace std;

int fact(int n) {
    int result = 1;
    for (int i = 2; i <= n; ++i)
        result *= i;
    return result;
}

int main() {
    string words;
    getline(cin, words);
    map<char, int> count;
    for (auto c: words) {
        ++count[c];
    }
    int ans = 1;
    for (auto &&it = count.begin(); it != count.end(); ++it) {
        ans *= fact(it->second);
    }
    cout << fact(words.size()) / ans;
    return 0;
}
相关推荐
就不掉头发几秒前
C++右值与右值引用
开发语言·c++
炸膛坦客9 分钟前
单片机/C/C++八股:(十六)C 中 malloc/free 和 C++ 中 new/delete 有什么区别?
c语言·开发语言·c++
Navigator_Z18 分钟前
LeetCode //C - 990. Satisfiability of Equality Equations
c语言·算法·leetcode
CSDN_Colinw23 分钟前
C++中的工厂方法模式
开发语言·c++·算法
liulilittle27 分钟前
范围随机算法实现
开发语言·c++·算法·lua·c·js
轩情吖1 小时前
MySQL之用户管理
数据库·c++·后端·mysql·权限管理·用户管理
2401_857918291 小时前
C++中的访问者模式实战
开发语言·c++·算法
格林威1 小时前
工业相机图像高速存储(C++版):RAID 0 NVMe SSD 阵列暴力提速,附海康实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·工业相机·堡盟相机
elseif1231 小时前
CSP-S提高级大纲
开发语言·数据结构·c++·笔记·算法·大纲·考纲
波特率1152001 小时前
C++中类的const与static关键字修饰函数与变量辨析
开发语言·c++·