日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网——华为题库(91~100) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

華為題庫

  • 91.走方格的方案數
  • 92.在字符串中找出連續最長的數字串
  • 93.數組分組
  • 94.記票統計
  • 95.人民幣轉換
  • 96.表示數字
  • 97.記負均正
  • 98.自動售貨系統
  • 99.自守數
  • 100.等差數列


91.走方格的方案數

#include <bits/stdc++.h>using namespace std;int main(){int n = 0, m = 0;while(cin >> n >> m){vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));for(int i = 0; i <= n; i++){dp[i][0] = 1;}for(int j = 0; j <= m; j++){dp[0][j] = 1;}for(int i = 1; i <= n; i++){for(int j = 0; j <= m; j++){dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; //}}cout << dp[n][m] << endl;}return 0; }

92.在字符串中找出連續最長的數字串

#include <bits/stdc++.h> using namespace std;int main() {string s = "";while(cin >> s){vector<pair<string, int>> res;int right = 0;int maxLength = INT_MIN;for(int i = 0; i < s.size(); i++){if(isdigit(s[i])){right = i;while(right < s.size() && isdigit(s[right])){right++;}if(right - i> maxLength){string tmp = s.substr(i, right - i);res.clear();res.push_back(make_pair(tmp, tmp.size()));maxLength = right - i;}else if(right - i == maxLength){string tmp = s.substr(i, right - i);string str = res[0].first + tmp;res.clear();res.push_back(make_pair(str, tmp.size()));}i = right;}}//輸出for(auto iter = res.begin(); iter != res.end(); iter++){cout << iter->first << "," << iter->second << endl;}} }

93.數組分組

#include <bits/stdc++.h>using namespace std;bool dp(vector<int> &nums, int t, int k){if(t == 0 && k == nums.size()) return true;if(k == nums.size()) return false;//如果只是3的倍數,不能加到該集合中。if(nums[k] % 3 == 0) return dp(nums, t, k + 1);if(nums[k] == t) return true;//對于一個數有兩種選擇,加或者不加到該集合中return dp(nums, t - nums[k], k + 1) || dp(nums, t, k + 1); // }int main(){int n = 0;while(cin >> n){/*//法一vector<int> nums;int sum = 0; //只要找到總和的一半即可,剩下的數字之和自然為總和的一半。int part = 0; //5的倍數的數字之和for(int i =0; i < n; i++){int num = 0;cin >> num;if(num % 5 == 0) part += num; //如果是5的倍數,不放入數組numselse nums.push_back(num);sum += num;}//如果所有數之和不是偶數,則肯定是falseif (sum%2){cout<<"false"<<endl;}else{sum = sum / 2;if(dp(nums, sum - part, 0)){cout << "true" << endl;}else cout<<"false"<<endl;}nums.clear();*///法二vector<int> arr;int sum3 = 0;int sum5 = 0;int rest = 0; //剩余的數的和for(int i = 0; i < n; i++){int x;cin >> x;if(x % 5 == 0) //先求一個組的和sum5 += x;else if(x % 3 == 0) //再求另一個組的和sum3 += x;else{arr.push_back(x); //剩余的加入數組并求和rest += x;}}//unordered_set<int> s1, s2;s1.insert(0); //枚舉所有組合的不重復和,0代表空數組for(int i = 0; i < arr.size(); i++){ //遍歷剩余的每一個數字,枚舉所有可能性s2 = s1; //for(auto iter : s2){s1.insert(iter + arr[i]); //s1中保存的是所有的剩余數的和的可能性}}bool res = false;for(auto iter : s1){ //遍歷枚舉的集合if(iter + sum5 == sum3 + (rest - iter)){ //分成兩部分后相等res = true;break;}}cout << (res ? "true" : "false") << endl;}return 0; }

94.記票統計

#include <bits/stdc++.h>using namespace std;int main(){int n = 0; //候選人的人數cin >> n;vector<string> name(n, ""); //候選人的名字for(int i = 0; i < n; i++){ string tmp = "";cin >> tmp;name[i] = tmp;}int num = 0; //投票人的人數cin >> num;vector<string> touPiao(num, ""); //投票for(int i = 0; i < num; i++){string tmp = "";cin >> tmp;touPiao[i] = tmp;}unordered_map<string, int> m;for(int i = 0; i < n; i++){ m[name[i]] = 0; //初始化}int invalid = 0;for(int i = 0; i < touPiao.size(); i++){bool isValid = false;for(int j = 0; j < name.size(); j++){if(touPiao[i] == name[j]){m[name[j]]++;isValid = true;}}//投票的名字不存在n個候選人的名字中if(!isValid){invalid++;}}//輸出for(int i = 0; i < n; i++){cout << name[i] << " : " << m[name[i]] << endl;}cout << "Invalid" << " : " << invalid << endl;return 0; }

95.人民幣轉換

#include <bits/stdc++.h>using namespace std;unordered_map<int, string> m ={{0, "零"},{1, "壹"},{2, "貳"},{3, "叁"},{4, "肆"},{5, "伍"},{6, "陸"},{7, "柒"},{8, "捌"},{9, "玖"},{10, "拾"}, };// 輸入:151121.15 // 輸出:人民幣拾伍萬壹仟壹佰貳拾壹元壹角伍分 void sayPre(string pre, string& res){if (pre == "0") return ; // 判斷小數點前面是不是空的for(int i = 0, j = pre.size() - 1; i < pre.size(); i++, j--){// i代表的是我們遍歷的字符串, j是我們i后面有幾個數if(pre[i] != '0' && !(pre[i] == '1' && j % 4 == 1)){res += m[pre[i] - '0'];}//轉換中文 // if分別對應后面輸出的億萬千百十if(j != 0 && j >= 8 && j % 8 == 0){res += "億";}if (j != 0 and j % 4 == 0 and j % 8 != 0)pre[i + 1] == '0' ? res += "萬零" : res += "萬";if (j != 0 and j % 4 == 3 and pre[i] != '0')pre[i + 1] == '0' && pre[i + 2] != '0' ? res += "仟零" : res += "仟";if (j != 0 and j % 4 == 2 and pre[i] != '0')pre[i + 1] == '0' && pre[i + 2] != '0' ? res += "佰零" : res += "佰";if (j != 0 and j % 4 == 1 and pre[i] != '0')res += "拾";}res += "元"; // 最后我們輸出元 }void sayEnd(string end, string& res){if (end == "00")res += "整";else if (end[0] == '0')res += m[end[1] - '0'] + "分";else if (end[1] == '0')res += m[end[0] - '0'] + "角";elseres += m[end[0] - '0'] + "角" + m[end[1] - '0'] + "分";// 分類討論, 討論我們小數點后兩位的所有情況 }int main(){string s = "";while(cin >> s){string res = "";res += "人民幣";string pre = "", end = "";bool xiaoShuDian = false;for(char ch : s){if(ch == '.'){xiaoShuDian = true;continue;}// 這里我們以小數點為分隔, 把小數點前面的存儲到了pre里面,// 小數點后面的存儲到了end里面xiaoShuDian ? end += ch : pre += ch;}sayPre(pre, res);sayEnd(end, res);cout << res << endl;} }

96.表示數字

#include <bits/stdc++.h>using namespace std;int main(){string s = "";while(cin >> s){string res = "";int i = 0; //while(i < s.size()){ if(isdigit(s[i])){res += "*";int right = i;while(right < s.size() && isdigit(s[right])){ res += s[right];right++;i++;}res += "*";}else{res += s[i];i++;} }cout << res << endl;}return 0; }

97.記負均正

#include <bits/stdc++.h>using namespace std;int main(){int n = 0;while(cin >> n){int negNums = 0;double sum = 0, cnt = 0;vector<int> nums(n, 0);for(int i = 0; i < n; i++){int num = 0;cin >> num;nums[i] = num;if(num < 0){negNums++;}else if(num > 0){cnt++;sum += num;}}double aveNum = 0.0;if(cnt != 0)aveNum = (double)sum / cnt; //sum * 1.0 / cnt//結果保留一位小數printf("%d %.1f\n", negNums, aveNum); //}return 0; }

98.自動售貨系統

99.自守數

#include <bits/stdc++.h> using namespace std;bool isZiShouShu(int num){int tmp = num * num;string s1 = to_string(num);string s2 = to_string(tmp);reverse(s1.begin(), s1.end());reverse(s2.begin(), s2.end());//cout << s1 << "," << s2 << endl;int i = 0;while(i < s1.size()){if(s1[i] != s2[i]){return false;}i++;}return true; }int main(){int n = 0;while(cin >> n){int res = 0;for(int i = 0; i <= n; i++){if(isZiShouShu(i)) res++;}cout << res << endl;}return 0; }

100.等差數列

#include <bits/stdc++.h>using namespace std;#define a1 2 #define d 3int 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; }

總結

以上是生活随笔為你收集整理的牛客网——华为题库(91~100)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。