牛客网——华为题库(100~108)


100.等差数列

#include <bits/stdc++.h>

using namespace std;

#define a1 2
#define d 3

int main(){
    
    
    int n = 0; 
    while(cin >> n){
    
    
        int res = 0;
        int an = a1 + (n - 1) * d;
        res = (a1 + an) * n / 2;
        
        cout << res << endl;
    }
    
    return 0;
}

101.输入整型数组和排序标识,对其元素按照升序或降序进行排序

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

struct cmp_0{
    
    
  bool operator()(const int& a, const int& b){
    
    
      return a < b;
  }  
};

bool cmp_1(const int& a, const int& b){
    
    
      return a > b;
  }  
 
int main(){
    
    
    int n = 0;
    while(cin >> n){
    
    
        vector<int> nums(n,0);
        for(int i = 0; i < n; i++){
    
    
            int num = 0;
            cin >> num;
            nums[i] = num;
        }
        
        int m = 0;
        cin >> m;
        
        if(m == 0){
    
    
            //升序
            sort(nums.begin(), nums.end(), cmp_0());
            for(int i = 0; i < n; i++){
    
    
                cout << nums[i] << " ";
            }
            cout << endl;
        }
        else if(m == 1){
    
    
            //降序
            sort(nums.begin(), nums.end(), cmp_1);
            for(int i = 0; i < n; i++){
    
    
                cout << nums[i] << " ";
            }
            cout << endl;
        }
    }
}

102.字符统计

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(const pair<char, int> & a, const pair<char, int> & b) {
    
    
    if(a.second == b.second){
    
    
          return a.first < b.first;
      }
      return a.second > b.second;
}

struct cmp1{
    
    
  bool operator()(const pair<char, int> & a, const pair<char, int> & b){
    
    
      if(a.second == b.second){
    
    
          return a.first < b.first;
      }
      return a.second > b.second;
  }  
};

int main(){
    
    
    string s = "";
    while(getline(cin, s)){
    
    
        map<char, int> m;
        for(char ch : s){
    
    
            m[ch]++;
        }
        
        vector<pair<char, int>> v(m.begin(), m.end());  //
       
        //sort(v.begin(), v.end(), cmp;
        //stable_sort(v.begin(), v.end(), cmp1());
        
        //因为map已经依照键排序了,所以用稳定排序当次数一样时,会保持原来的先后关系,即ASCII码的升序
        stable_sort(v.begin(), v.end(), [](const pair<char,int>& a,const pair<char,int>& b){
    
    
            //用Lambda来写配合算法使用的小函数是非常方便的
            return a.second>b.second;
        });
        
        for(auto iter : v){
    
    
            cout << iter.first;
        }
        cout << endl;
    }
    
    return 0;
}

103.Redraiment的走法

#include <bits/stdc++.h>

using namespace std;

int main(){
    
    
    int n = 0;
    while(cin >> n){
    
    
        vector<int> nums(n, 0);
        for(int i = 0; i < n; i++){
    
    
            int num = 0;
            cin >> num;
            nums[i] = num;
        }
        
        vector<int> dp(n, 1); //dp[i]表示以nums[i]为结尾的严格上升子序列的长度(初始化为1)
        int res = 1;
        for(int i = 0; i < nums.size(); i++){
    
    
            for(int j = 0; j < i; j++){
    
     //遍历前面的
                if(nums[j] < nums[i]){
    
     //确保严格上升
                    dp[i] = max(dp[i], dp[j] + 1); //
                }
            }
            res = max(res, dp[i]); //维护最大值
        }
        
        cout << res << endl;
    }
    
    return 0;
}

105.记负均正II

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

int main(){
    
    
    int num = 0;
    double sum = 0, ave = 0;
    int posNum = 0;
    int negNum = 0;
    while(cin >> num){
    
     
        if(num < 0){
    
    
            negNum++;   
        }
        else{
    
    
            posNum++;
            sum += num;
        }
        
        if(posNum != 0) ave = sum / posNum;      
    }  
    cout << negNum << endl;
    printf("%.1lf\n", ave); 
}

106.字符逆序

#include <bits/stdc++.h>

using namespace std;

void process(string str, string& res){
    
    
    reverse(str.begin(), str.end());
    res = str;
}

int main(){
    
    
    string str = "";
    while(getline(cin, str)){
    
    
        string res = "";
        
        process(str, res);
        
        cout << res << endl;
    }
    
    return 0;
}

107.求解立方根

#include <bits/stdc++.h>

using namespace std;

double cal(double x){
    
    
    //正负数都有
    double l = min(-1.0, x);
    double r = max(1.0, x);
    
    double y;
    while(abs(r - l) > 0.01){
    
     //立方根的精度值
        y = (l + r) / 2;
        if(y*y*y > x){
    
     //
            r = y;
        }
        else{
    
    
            l = y;
        }
    }
    
    return y;
}

int main(){
    
    
    double num = 0.0;
    while(cin >> num){
    
    
        //cout << setprecision(1) << fixed << cal(num) << endl; //控制小数位输出
        printf("%.1lf", cal(num));
    }
    
    return 0;
}

108.求最小公倍数

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

int main(){
    
    
    int A = 0, B = 0;
    while(cin >> A >> B){
    
    
        int tmp = A * B;
        for(int i = min(A, B); i <= tmp; i++){
    
    
            if(i % A == 0 && i % B == 0){
    
    
                cout << i << endl;
                break;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/XUfengge111/article/details/125145591
今日推荐