华为机考题目-C++

目录

1、HJ97 记负均正

2、HJ13 句子逆序

3、HJ37 统计每个月兔子的总数

4、HJ31 单词倒排

5、HJ36 字符串加密

6、HJ34 图片整理

7、HJ105 记负均正II

8、HJ3明明的随机数

9、HJ17 坐标移动

10、HJ35 蛇形矩阵

11、HJ38 求小球落地5次后所经历的路程和第5次反弹的高度

12、HJ52 计算字符串的编辑距离

13、HJ62 查找输入整数二进制中1的个数

14、HJ108 求最小公倍数

15、HJ32 密码截取

16、HJ22 汽水瓶

17、输出单向链表中倒数第k个结点

1HJ97 记负均正

C++
#include <iostream>
using namespace std;
#include <bits/stdc++.h>

int main(){
    int n;
    cin>>n;
    int cnt = 0;
    int sum = 0;
    double average;
    int notNeg = n;
    while (n--) {
      double a;
      cin>>a;
      if(a<0)cnt++;
      if(a>0)sum+=a;
      if(a==0)notNeg--;
    }
    if(sum==0)average = 0.0;
    else average = (sum*1.0)/(notNeg-cnt);

    cout << cnt << " " << fixed << setprecision(1) << average <<endl;
    // cout<<cnt<<" "<<average<<endl;

    return 0;
}

    cout << cnt << " " << fixed << setprecision(1) << average <<endl;

2HJ13 句子逆序

C++
#include <iostream>
#include <string>
#include <vector>
using namespace std;

string converse( vector<string> s){
     vector<string>ans ;
     for(int i = s.size()-1;i>=0;i--){
      ans.push_back(s[i]);
     }
     string res;
     for(int i = 0;i<ans.size();i++){
        res = res+ans[i];
        res = res + " ";
     }
     return res;

}


int main() {
    string s;
    vector<string>vec;
    while (cin>>s) {
    vec.push_back(s);
    }
    string ans = converse(vec);
    cout<<ans<<endl;

    return 0;

}

 

3HJ37 统计每个月兔子的总数

C++
#include <iostream>
#include<vector>
using namespace std;

int TotalRab(const int& mounth) {
    vector<int>dp(mounth + 1);
    dp[1] = 1;
    dp[2] = 1;
    dp[3] = dp[1] + 1;
    for (int i = 3; i < mounth + 1; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[mounth];

}

int main() {
    int n;
    cin >> n;
    cout<<TotalRab(n)<<endl;

}
// 64
位输出请用 printf("%lld")

4HJ31 单词倒排

C++
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

void converse(const vector<string>& s) {
    int n = s.size();
    for(int i = 0;i<s.size();i++){
        cout<<s[n-1-i]<<" ";
    }
    cout<<endl;
}

int main() {
    string str;
    vector<string>contain;
    getline(cin,str);  //
从标准输入读取一行文本,并存储在 str 中
    for (int i = 0; i < str.size(); i++) {
        if (!isalpha(str[i])) {
            str[i] = ' ';
        }
    }

    stringstream input(str);  //分割字符串为单词
    while (input>>str) { //input >> word 会从 input 中读取一个单词,直到遇到空格、制表符或其他空白字符
        contain.push_back(str);
    }
    converse(contain);
}

5HJ36 字符串加密

C++
#include <iostream>
#include <string>
#include <vector>
#include <unordered_set>
using namespace std;

string CodeKey(string s1, string s2) {
    unordered_set<char>light;
    vector<char>light_new;

//
去除重复字符
    for (int i = 0; i < s1.size(); i++) {
        if (light.find(s1[i]) == light.end()) {
            light.insert(s1[i]);
            light_new.push_back(s1[i]);
        }
    }

    vector<char>ortable = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

    vector<char>table_new;
    for (int i = 0; i < light_new.size(); i++) {
        table_new.push_back(light_new[i]);
    }
    for (int i = 0; i < ortable.size(); i++) {
        if (light.find(ortable[i]) != light.end()) {
            continue;;
        }
        table_new.push_back(ortable[i]);
    }

    vector<int>pos;
    for (int i = 0; i < s2.size(); i++) {
        for (int j = 0; j < ortable.size(); j++) {
            if (s2[i] == ortable[j]) {
                pos.push_back(j);
            }
        }
    }

    vector<char>ans;
    for (int i = 0; i < pos.size(); i++) {
        ans.push_back(table_new[pos[i]]);
    }

    string result;
    for (auto s : ans) {
        result += s;
    }
    return result;

}

int main() {
    string a;
    string b;
    cin >> a;
    cin >> b;
    cout << CodeKey(a, b) << endl;

}

 

6HJ34 图片整理

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

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

}

 

7HJ105 记负均正II

C++
#include <iostream>
#include<vector>
#include <bits/stdc++.h>
using namespace std;

void jfjz(vector<int> nums){
    int cnt = 0;
    double sum = 0;
    int n = nums.size();
    for(auto num:nums){
        if(num<0){
            cnt++;
        }
        if(num>=0){
            sum+=num;
        }
    }
    cout<<cnt<<endl;
    double average;
    if(n-cnt==0){
        average = 0;
    }
    else {
    average = sum/(n-cnt);
    }

    cout<< fixed << setprecision(1)<<average<<endl;
 
}

int main() {
    int num;
    vector<int>nums;
    while (cin>>num) {
    nums.push_back(num);
    }
    jfjz(nums);
    return 0;

}

 

8HJ3明明的随机数

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

int main() {
    int a;
    cin>>a;
    int num;
    set<int>s;
    while (cin>>num) {
      s.insert(num);
    }
    for(auto number:s){
        cout<<number<<endl;
    }
    return 0;

}

9HJ17 坐标移动

JavaScript
#include <cctype>
#include <iostream>
#include<cstdlib>
using namespace std;

bool isNum(string s){
    for(auto num:s){
        if(!isdigit(num))   return false;
       
    }
    return true;
}

int main() {
    string s;
    int x = 0;
    int y = 0;

    while(getline(cin,s,';')){
        if(s.empty()){
            continue;
        }
        string s1 = s.substr(1);
        if(isNum(s1)&&s1.length()<=2){
            switch(s[0]){
                case 'A':
                x -= stoi(s1);
                break;
                case 'D':
                x += stoi(s1);
                break;
                case 'W':
                y += stoi(s1);
                break;
                case 'S':
                y -= stoi(s1);
                break;
                default:
                break;
            }
        }
    }
    
     cout<<x<<","<<y<<endl;
}

 

10HJ35 蛇形矩阵

C++
#include <iostream>
#include<vector>
using namespace std;

int main() {
    int n;
    cin>>n;
    vector<vector<int>> vec(n,vector<int>(n));
    int a = 0;
    for(int i = 0;i<n;i++){
        for(int j=0;j<=i;j++){
           vec[i-j][j] = ++a;
        }
    }

    for(int i = 0;i<n;i++){
        for(int j = 0;j<n-i;j++){
            cout<<vec[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
// 64
位输出请用 printf("%lld")

11HJ38 求小球落地5次后所经历的路程和第5次反弹的高度

C++
#include <iomanip>
#include <iostream>
using namespace std;

int main() {
    int high;
    cin>>high;

    cout<<fixed<<setprecision(3)<<2.875*high<<endl;
    cout<<fixed<<setprecision(6)<<0.03125*high<<endl;

}
// 64
位输出请用 printf("%lld")

12HJ52 计算字符串的编辑距离

C++
#include <iostream>
using namespace std;

int Distance(string s1,string s2){
    int f[1001][1001];
    int n = s1.size();
    int m = s2.size();
    for(int i = 0;i<n;i++){
        f[i][0] = i;
    }

    for(int i = 0;i<m;i++){
        f[0][i]=i;
    }

    for(int i = 1;i<n;i++){
        for(int j = 1;j<m;j++){
            f[i][j] = min(f[i-1][j]+1,f[i][j-1]+1);
            if(s1[i]!=s2[j]){
                f[i][j] = min(f[i][j],f[i-1][j-1]+1);
            }
            else {
                f[i][j] = min(f[i][j],f[i-1][j-1]);
            }
        }
    }

    return f[n-1][m-1];
}


int main() {
    string s1 , s2;
    cin >>s1; s1 = ' '+s1;
    cin >>s2; s2 = ' '+s2;
    cout<<Distance(s1, s2)<<endl;
    return 0;

}
// 64
位输出请用 printf("%lld")

13HJ62 查找输入整数二进制中1的个数

C++
#include <iostream>
using namespace std;

int Binary(int num){
    int ans = 0;
    while (num!=0) {

        if(num%2!=0) ans++;
        num /= 2;
    }

    return ans;
}

int main() {
    int num;
    while (cin>>num) {
        cout<<Binary(num)<<endl;
    }
}

 

14HJ108 求最小公倍数

C++
#include <iostream>
using namespace std;

int MinBeishu(int a , int b){
    int ans;
    for(int i = 1;i<=b;i++){
        for(int j =1;j<=a;j++){
            if(a*i==b*j){
                ans =  a*i;
                return ans;
            }
        }
    }

    return ans;
}

int main() {
    int a,b;
    cin>>a;
    cin>>b;
    cout<<MinBeishu(a,b)<<endl;

}

 

15HJ32 密码截取

C++
#include <iostream>
using namespace std;

int CodeGet(string s) {
    int maxlength = 0;
    int n = s.size();

    for (int i = 1; i < n; i++) {
        int low = i - 1;
        int high = i;
        while (low >= 0 && high < n && s[low] == s[high]) {
            low--;
            high++;
        }

        maxlength = max(maxlength, high - low - 1); //high - low +1-2

         low = i - 1;
         high = i + 1;
        while (low >= 0 && high < n && s[low] == s[high]) {
            low--;
            high++;
        }
        maxlength = max(maxlength, high - low - 1);
    }

    return maxlength;

}

int main() {
    string s;
    cin >> s;
    cout << CodeGet(s) << endl;

}

 

16HJ22 汽水瓶

C++
#include <iostream>
using namespace std;

int TotalBottle(int n) {
    return n/2;
}

int main() {
    int n;
    while (cin >> n) {
        if (n > 0) {
            cout << TotalBottle(n) << endl;
        }
    }
    return 0;

}

 

17、输出单向链表中倒数第k个结点

C++
#include <iostream>
using namespace std;
#include<vector>

class Node {
  public:
    int val;
    Node* next;
    Node(int x) {
        val = x;
        next = nullptr;
    }
};

int main() {
    int num;
    int number;
    while (cin >> num) {
        vector<int> vec;

        while (num > 0) {
            cin >> number;
            vec.push_back(number);
            num--;
        }
        int n = vec.size();
        int k;
        cin >> k;
        cout << vec[n - k] << endl;

    }
    return 0;
}
// 64
位输出请用 printf("%lld")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值