10.15.2024刷华为OD C题型(二)
- 密码输入检测
- 智能成绩表
如果是目标院校150分能过,而且这道题是两百分的话我就阿弥陀佛了。
这类简单类型的字符串处理题目一看就有思路,起码能做,遇到那种稍微加点数学的,感觉直接GG。
所以说,不知道这种永无止境的测试对于个人的技术积累有什么意义,难度适中还行,如果难度大到一定程度,就算是神仙也一样做不出来。
就算是侥幸过了,实操的时候,还有很多的考试内容,不知道应该怎么去过,但至少这个东西先不用想。
所以重新明确目标就是 至少每天浏览十道题目,把简单的题目思路过一遍,剩下的难题再说,至少把之前自己的代码能力先捡回来。
十道题目,做一下挑选分类,评定题目的难度。
我发现刷题这种东西根本没法停下哎,一停下来就会忘记很多东西,所以说好好复习吧。
这道智能成绩表,我就先放在这里。明天回来复习,也不知道AI生成的对不对。
密码输入检测
这题做了半个钟,其实不难,就是细枝末节慢慢摸回来,要是用上AI估计更快…所以前期可以慢,但是后面要 慢慢加快速度。
1.遍历,注意字符串遍历会缩短,因此先用空格代替,后面再排除一遍
2.一个个判断,然后&&得出结果
#include <iostream>
#include <string>
using namespace std;string scanStr(string str);
int main() {string str = "ABC<c89%000<";string result;for (int i = 0; i < str.length(); ++i) {if(str[i] == '<'){if(i != 0){str[i] = ' ';str[i-1] = ' ';}}}for (char ch : str) {if (!isspace(ch)) {result += ch;}}cout << result << ',';//判断是否满足要求bool a = false;if(str.length() >= 8) a = true;bool b = false;for(int i = 0; i < str.length(); i++){if(str[i] >='a'&& str[i] <='z')b = true;break;}bool c = false;for(int i = 0; i < str.length(); i++){if(str[i] >='A'&& str[i] <='Z')c = true;break;}bool d = false;for(int i = 0; i < str.length(); i++){if(str[i] >='0'&& str[i] <='9')d = true;break;}bool e = false;for(int i = 0; i < str.length(); i++){if(str[i] >='0'&& str[i] <='9' || str[i] >='a'&& str[i] <='z' || str[i] >='A'&& str[i] <='Z'){continue;}else{e = true;break;}}bool result1 = a && b && c && d &&e;string res = result1 ? "true":"false";cout<< res << endl;return 0;
}
智能成绩表
https://www.nowcoder.com/discuss/561941270055096320
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>using namespace std;struct Student {string name;vector<int> scores;
};bool compareStudents(const Student& a, const Student& b, const string& subject) {if (subject.empty()) {// 按总分排序return accumulate(a.scores.begin(), a.scores.end(), 0) >accumulate(b.scores.begin(), b.scores.end(), 0);} else {// 找到对应科目的索引int index = find(a.scores.begin(), a.scores.end(), subject) - a.scores.begin();return a.scores[index] > b.scores[index];}
}int main() {int n, m;cin >> n >> m;vector<string> subjects(m);for (int i = 0; i < m; i++) {cin >> subjects[i];}vector<Student> students(n);for (int i = 0; i < n; i++) {cin >> students[i].name;students[i].scores.resize(m);for (int j = 0; j < m; j++) {cin >> students[i].scores[j];}}string sortSubject;cin >> sortSubject;// 根据指定科目或总分排序sort(students.begin(), students.end(),[&sortSubject](const Student& a, const Student& b) {return compareStudents(a, b, sortSubject);});// 输出排序后的学生姓名for (const auto& student : students) {cout << student.name << " ";}cout << endl;return 0;
}