零、做题流程text//拿到题目 1.读题 看懂题 输入输出开个wold理清楚题意maybe可以暴力解题 // 2.定数据结构 int char string[] struct(结构体 vectorinta容器 // 3.看用什么算法题目特征 → 对应语法 速查表看到题目说就用这个语法输入一行可能有空格的字符串getline(cin, s)输入n再输入n个数vectorint a(n); for(int i0;in;i){ cina[i]; }不知道几个数一直输到文件尾while(cin x){ a.push_back(x); }要统计字符串里字母/数字/空格个数for(char c : s){ if(ca...) }要判断相邻字符是否相同for(int i0; is.size()-1; i){ if(s[i]s[i1]) }要把数字拆成各个位数如123→1,2,3while(a){ couta%10; a/10; }要取个位/十位/百位gea%10; shia%100/10; baia/100;要统计1到2020里有多少个2to_string(i) for(char c:s)要找某个数第一次出现的位置for(int i0;in;i){ if(a[i]x){ ansi1; break; } }要给数字排序从小到大sort(a.begin(), a.end())要给数字排序从大到小sort reverse或greaterint()要按总分/成绩等多条件排序struct sort cmp要计算前缀和区间和查询pre[i] pre[i-1] a[i]要判断素数for(int i2; inum; i){ if(num%i0) }要保留三位小数输出cout fixed setprecision(3) x要拼接两个字符串cout a s要在字符串里查找某个字符s.find(y)要截取字符串的一部分s.substr(1,2)要在字符串中间插入s.insert(2,i)要删除字符串的一部分s.erase(2)要替换字符串的一部分s.replace(1,2,xxx)要遍历vector所有元素for(auto i : a)要用true/falsebool r true;大小写转换A a - 32;1️⃣、输入n个数据的两种方式/输入n再输入n行。 int n; cin n; vectorint a(n);//已知输入多少数 for(int i 0; i n; i) { cin a[i]; } /vector容器a,while输入,全用a.push_back把x赋值到 a int n; cin n; vectorint a;//未知输入多少数 int x; while(cin x) { //while(t--){ 处理t次比如有两行数据需要处理两次 a.push_back(x); }一、基础语法输入输出、取模、ASCII、保留小数#includebits/studc.h using namespace std; int main(){ return 0; }int num;char sex;double score1; string s; cinnumsexscore1; getline(cin,s); //读取输入的整行遇到有空格的字符串时用 如例2.1 coutID:num sex\n; //输入 输出 换行用 \n快 ,不要用endl coutfixedsetpricision(3)\n;//保留三位小数 bool r; //定义波尔类型0false1true cout(105)endl; //输出0 cina; ge a%10; shi a%100/10; bai a/100; //%是取 /是删 // 是ASCLL码值 表示字符串 char c ; string c A a-32; countfixedsetprecision(2)yendl; //printf(.2lf\n,y) 保留两位小数 printf(%02lld:%02lld:%02lld, h, m, ss); //可自动补零 09:02:30暴力解题/---------------------暴力枚举------------------------------ /ab * cde adb * ce 有几种排列方式 /循环且不重复用for if()continue; #includebits/stdc.h using namespace std; int main(){ int cnt 0; for(int a1;a9;a){ for(int b1;b9;b){ if(ba)continue;//不要这个b,跳出当前循环 for(int c1;c9;c){ if(ca||cb)continue; for(int d1;d9;d){ if(da||db||dc)continue; for(int e1;e9;e){ if(ea||eb||ec||ed)continue; int left (a*10 b) * (c*100 d*10 e); int right (a*100 d*10 b) * (c*10 e); if(left right) { cnt; } } } } } } coutcnt\n; return 0; } /---------------年月日是否回文 20200202----------------- for(int date start 1; ; date) { int y date / 10000; int m date / 100 % 100; int d date % 100; // 把年份倒过来 int rev (y%10)*1000 (y/10%10)*100 (y/100%10)*10 (y/1000); // 不是回文就继续 if(rev ! m*100 d) continue;二、分支循环语句if-else、while、for//-------------------if - else循环------------------------------- if(x1){ yx; }else{ y3*x-11; } countfixedsetprecision(2)yendl; //printf(.2lf\n,y) 保留两位小数 //-------------------while循环取各个位数------------------------------- int a; cina; while(a){ couta%10endl; a / 10; }return 0; //-------------------for循环判断素数------------------------------------- for (int i 2; i num; i) { if (num % i 0) { isPrime false; break;三、string字符串基本操作//-------------------string 字符串拼接---------------------------------- string ashi; string syuqian coutas; s.find(y) ;//查找 s.substr(1,2);//截取 s.insert(2,i);//插入yuiqian s.erase(2);//删除 s.replace(1,2, tihuan)//1开始数2个中间替换 y tihuanqian s.size()遍历字符串// 例题1判断相邻两个字符是否相同 //需要知道位置或者需要同时看前后字符 string s hello; for(int i 0; i s.size() - 1; i) { if(s[i] s[i1]) { cout 发现重复 s[i] endl; } } // 例题2统计元音字母 string s hello; int count 0; for(char c : s) { //c 是临时变量只在循环内有效 if(c a || c e || c i || c o || c u) { count; } }数字转字符串统计某个数字出现次数//例题2统计 1-2020 中共有几个2 [取数变成字符串之后挨个判断] int cnt0; for(int i1;i2020;i){ string s to_string(i);//变成字符串统计 for(char c:s){ if(c2)cnt; } } coutcntendl;统计字符串中字母/数字/空格/其他//例题3计算输入有几个字符几个数字几个空格几个其他 #includebits/stdc.h using namespace std; int main(){ string S; getline(cin,S); int z0;int s0;int k0;int q0; for(char c:S){ // for(int i 0; i S.length(); i){ char c S[i]; if(cacz||cAcZ) z; else if(c0c9) s; else if(c ) k; else q; } coutzskq\n; return 0; }四、vector容器基本操作/--------------------vector 一个无限大的容器------------------------------------------- // int n;cinn; vectorint a; //数组容器 for (int i1;in;i){ int x;cinx; a.push_back(x); } for(auto i :a){ //自动识别 couti ; } a.size() // 容器里有多少个元素 a[i] // 访问第i个元素从0开始 a.push_back(x) // 在末尾添加一个元素 sort(a.begin(), a.end()) // 排序整个容器前缀和/---------------计算前缀和-------------------- vectorint pre(n); pre[0] a[0]; for(int i 1; i n; i) { pre[i] pre[i-1] a[i]; // 当前前缀和 上一个 当前数 }五、sort排序基本排序/---------------sort 排序----------------------------------------------- sort(a.begin(), a.end()); // 升序  verse(a.begin(), a.end()); // 反转成降序sort和vector结合/-------------------sort和vector结合------------------------------------- //排序 #includebits/stdc.h using namespace std; int main(){ int n;cinn; vectorint a(n); // 直接创建大小为n的vector for(int i0;in;i){ cina[i]; } sort(a.begin(),a.end()); for(int i0;in;i){ couta[i] ; } return 0; }查找第一次出现的位置//输入几个数字再依次输入数字输入需查找的第一次出现的数字输出位置无则-1 #includebits/stdc.h using namespace std; int main() { int n; //固定了输入n,和n个数 cin n; vectorint a(n); for(int i 0; i n; i) { cin a[i]; } int x; cin x; int ans -1; for(int i 0; i n; i) { if(a[i] x) { ans i 1; // 位置 下标 1 break; // 找到就停 } } cout ans endl; return 0; }sort和struct结合多关键字排序/--------------------sort和struct结合-------------------------- #includebits/stdc.h using namespace std; //定义结构体 5个人4种性质 struct STU{ int math; // 数学 int Chinese; // 语文 int English; // 英语 }; //定义函数 要在main外 bo if (a.all ! b.all) { return a.all b.all; // 总分高的排前面 } else if (a.math ! b.math) { return a.math b.math; // 总分相同数学高的排前面 } else if (a.Chinese ! b.Chinese) { return a.Chinese b.Chinese; } else { return a.English b.English; } } int main(){ STU S[5] { {285, 98, 92, 95}, {278, 90, 95, 93}, {285, 95, 96, 94}, {285, 95, 96, 92}, {290, 99, 96, 95}, }; sort(S,S5,cmp);//排序 for(int i0;i5;i){ cout S[i].all S[i].math S[i].Chinese S[i].English endl; } return 0; }找因子 na*b*c#includebits/stdc.h using namespace std; int main() { long long n 2021041820210418; vectorlong long yinzi; // 存所有因子 // 找因子优化只需要找到平方根 for(long long i 1; i * i n; i) { if(n % i 0) { // i能整除n吗 yinzi.push_back(i); // 能就加入i if(i ! n / i) { // i和n/i不一样吗 yinzi.push_back(n / i); // 不一样就把另一个也加入 } } } // 枚举a和b int cnt 0; for(long long a : yinzi) { for(long long b : yinzi) { if(n % (a * b) 0) { // a×b能整除n吗 cnt; // 能就找到一种 } } } cout cnt endl; // 答案2430 return 0; }