华为机试2——计算字符个数、明明的随机数、字符串分隔、进制转换、取近似值、字符个数统计、字符串反转、句子逆序、字符串的连接最长路径查找

目录

计算字符个数

明明的随机数

字符串分隔

进制转换

取近似值

字符个数统计

字符串反转

句子逆序

字符串的连接最长路径查找


计算字符个数

水题,注意题目说大小写不区分,大写+32就是小写,一定记清小写的码值更大!

#include <iostream>
#include <string>
using namespace std;

int main(){
    string s;
    char c;
    cin>>s>>c;
    int n = 0;
    for(int i=0;i<s.size();i++){
        if(s[i]==c||(s[i]-32)==c||(s[i]+32)==c)
            n++;
    }
    cout<<n<<endl;
    
    return 0;
}

明明的随机数

全是基础问题都很简单,就是一定要看清楚输入和输出!看清楚怎么描述的!和PAT乙级一样,你都会做,就怕卡了!!!

充分理解题意后再动手!

#include <iostream>
#include <set>
#include <vector>
#include <cstdlib>
using namespace std;

int main(){
    
    int k;
    int n;
    vector<int> v;
    while(cin>>k){
        for(int i=0;i<k;i++){
            cin>>n;
            v.push_back(n);
        }
        set<int> s(v.begin(),v.end());//测试样例不止一组,排序和去重的工作是一组一组的进行!
        //所以不能整个定义set然后把所有样例输进去排序去重!
        for(set<int>::iterator it = s.begin();it!=s.end();it++)
            cout<<*it<<endl;
        v.clear();
    }
    
    return 0;
}

字符串分隔

得出的教训是出了bug牛客的提示真是坑,要自己先捋一遍逻辑在搞!

又不能调试,题都很简单,滤清逻辑!

#include <iostream>
#include <string>
using namespace std;

void fun(string s){
    int n = s.size()/8;
    int m = s.size()%8;
    for(int j = 0;j<n;j++){
        for(int i=0;i<8;i++){
            cout<<s[i+8*j];
        }
        cout<<endl;
    }
    for(int i=8*n;i<s.size();i++){
        cout<<s[i];
    }
    if(m!=0){
        for(int j = 0;j<8-m;j++){
            cout<<'0';
        }
        cout<<endl;
    }
}

int main(){
    string s1,s2;
    cin>>s1>>s2;
    fun(s1);
    fun(s2);
    return 0;
}

进制转换

平时LeetCode代码写的太舒服了,换成牛客挺不习惯……多练啊

#include <iostream>
#include <cmath>
using namespace std;

int main(){
    
    string s;
    while(cin>>s){
        int n=0;
        for(int i=2;i<s.size();i++){
            if(s[i]<='9'&&s[i]>='0'){
                n+=(pow(16,(s.size()-i-1))*(s[i]-'0'));
            }else{
                int a = s[i]-'A'+10;
                n+=(pow(16,(s.size()-i-1))*a);
            }
        }
        cout<<n<<endl;
    }
    return 0;
}

取近似值

#include <iostream>
using namespace std;

int main(){
    
    double a;
    double b;
    cin>>a;
    int c=(int)a;
    b = a-c;
    if(b>=0.5){
        cout<<c+1<<endl;
    }else{
        cout<<c<<endl;
    }
    return 0;
}

字符个数统计

搞清题意华为机试其实很简单

#include <iostream>
#include <string>
#include <set>
using namespace std;

int main(){
    
    string s;
    cin>>s;
    set<char> c(s.begin(),s.end());
    cout<<c.size()<<endl;
    /*
    int n = 0;
    for(set<char>::iterator it = c.begin();it!=c.end();it++){
        if(*it<=127&&*it>=0)//一开始还根据题意傻乎乎地判断
            n++;
    }
    cout<<n<<endl;
    */
    return 0;
}

字符串反转

手都做软了

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    string s;
    cin>>s;
    reverse(s.begin(),s.end());
    cout<<s<<endl;
    return 0;
}

句子逆序

PAT乙级一模一样的题,栈

牛客上没有最后一个字符输出空格就报段错误,比PAT宽松多了

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int main(){
    
    stack<string> sta;
    string s;
    while(cin>>s){
        sta.push(s);
    }
    string ss;
    while(!sta.empty()){
        ss = sta.top();
        cout<<ss<<" ";
        sta.pop();
    }
    //牛客上没有最后一个字符输出空格就报段错误,比PAT宽松多了
    /*
    while(sta.size()!=1){
        ss = sta.top();
        cout<<ss<<" ";
        sta.pop();
    }
    ss = sta.top();
    cout<<ss<<endl;
    */
    return 0;
}

字符串的连接最长路径查找

题目名字倒是挺吓人的,然而一个multiset轻松解决

#include <iostream>
#include <set>
using namespace std;

int main(){
    
    string s;
    multiset<string> a;//注意不能自动去重!
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>s;
        a.insert(s);
    }
    for(set<string>::iterator it = a.begin();it!=a.end();it++)
        cout<<*it<<endl;
    
    return 0;
}
发布了377 篇原创文章 · 获赞 344 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/104974074
今日推荐