华为OD(牛客网题库C++解法)

HJ1 字符串最后一个单词的长度

解法1:将所有单词都存入一个字符数组中,调用size()函数输出最后一个单词大小即可

#include 
#include 
using namespace std;

int main() {
    string str;
    vector s; 
    while(cin >> str)
    {
        s.push_back(str);
    }
    cout << s[s.size()-1].size() << endl;
    return 0;
}

解法2:找到最后一个空格的位置,需要注意处理没有空格的位置单独处理,即对pos初值的选定

#include 
#include 
using namespace std;
 
int main() {
    string s;
    getline(cin,s);
    int pos(-1);
    for(int i=0; i

HJ2 计算某字符出现次数

将字符串中字母统一进行转换成大写或者小写,然后遍历即可

#include 
#include 
using namespace std;

int main() {
    string s;
    getline(cin,s);
    for(int i=0; i> a;
    if(islower(a[0])) 
       a[0]=a[0] + 'A' - 'a';
    int ans(0);
    for(auto c : s)  //便利s中的每个元素c
    {
       if(c == a[0])  ++ans;
    }
    cout << ans << endl;
    return 0;
}

HJ3 明明的随机数

排序后,直接输出与上一个数不相等的数

#include 
#include
using namespace std;
const int maxn = 1010;
int a[maxn];
int n;

int main() {
    cin >> n;
    for(int i=1; i <= n; ++i )   //从一开始输入,方便后续处理
       cin >> a[i];
    sort(a+1,a+1+n);
    for(int i=1; i <= n; ++i)
       if(a[i] != a[i-1])
       {
          cout << a[i] << endl;
       }
    return 0;
}

HJ4 字符串分隔

注意提前补0,然后每八位输出即可

#include 
#include 
using namespace std;

int main() {
    string s;
    getline(cin,s);
    while(s.length() % 8) 
          s.push_back('0');
    if(s.length()==0) 
      return 0;
    for(int i=0;i

HJ5 进制转换

位运算,乘以16相当于16进制下左移一位

#include 
#include
using namespace std;

int main() {
    string s;
    while(cin>>s)
    {
        int ans(0);
        for(int i=2;i

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