枚举:又称暴力搜索,列出所有可能性,通过条件进行筛选 模拟:按照题目流程进行编程 字符串及其函数: length() size() substr() substr(下标,长度) 从下标开始,截取固定长度 substr(下标) 从下标开始截取到最后 find() find(子串) 从头往后找,将查找到的子串开头下标返回 find(子串,下标) 从下标开始往后找,将查找到的子串开头下标返回 输入一个字符串a,再输入一个字符串b b在a中出现的次数 abcabcabcabc ab 4 aaabbaaabb aa 4 string a,b; int c=0,j=0; while(true){ int i=a.find(b,j); if(i==-1) break; c++; j=i+1; } cout<<c; string a="abc",b="d"; cout<<a.find(b)<<endl; int k=a.find(b); cout<<k; 数组: 数组的创建 数组的输入 数组的遍历 数组的下标:从0开始,可以代表特殊含义:ascii,日期月份 数组的名:数组第一个元素的地址 伪代码: 中文+英文+其他注释名字组成的流程 流程图: 矩形+椭圆形+平行四边形+菱形+尖头等组成的图 位运算: 二进制运算符号 &与 |或 ~非 ^异或 左移<< 右移>> 非 将二进制的值变成相反的0-1 1-0 ~11001101 = 00110010 或 两个值包含1,结果就是1 11001010 | 00110110 = ? -> 11111110 11001010 | 00110110 --------------- 11111110 与 两个值都为1,结果就是1 11001010 & 00110110 = ? -> 00000010 异或 相同为0,不同为1 11001010 ^ 00110110 = ? -> 11111100 左位移运算:<< 非符号位整体左移一位*2 101->00000101左移1位 00001010 00000101<<1 = 00001010 相当于数字的大小*2 右位移运算:>> 非符号位整体右移一位/2 00000101>>1 = 00000010 相当于数字的大小/2 如果左移右移负数,符号位位置不变,空位补零 进制转换: 1、十进制->R进制 或 R进制->十进制 65(10)->?(3) 65/3=21..2 21/3=7..0 7/3=2..1 2/3=0..2 倒序:2102即为答案 2102(3)->?(10) 2*3*3*3+1*3*3+0*3+2=54+9+0+2=65 2102(5)->?(10) 2*5*5*5+1*5*5+0*5+2=277 100(5)->?(10) 25 100(10)->?(5) 400 2、二进制小数计算 5.25(10)->?(2) 整数部分使用短除法:101 小数部分*2取整直到小数为0 0.25*2=0.5 0 0.5*2=1 1 正序 01 5.25(10)->101.01(2) 0.1875*2=0.375 0 0.375*2=0.75 0 0.75*2=1.5 1 0.5*2=1.0 1 123.1875 1111011.0011 88.888 保留小数点后8位 88=64+16+8=1011000 0.888*2=1.776 1 0.776*2=1.552 1 0.552*2=1.104 1 0.104*2=0.208 0 0.208*2=0.416 0 0.416*2=0.832 0 0.832*2=1.664 1 0.664*2=1.328 1 88.888(10)=1011000.11100011(2) 任意进制小数转十进制:乘负权指数再计算 1011000.11100011 64+16+8=88 .11100011 1/2 =0.5 1/2/2 =0.25 1/2/2/2 =0.125 ...0.0625 0.03125 0.015625 1/2/2/2/2/2/2/2 =0.0078125 1/2/2/2/2/2/2/2/2 =0.00390625 0.5 0.25 0.125 0.0078125 +0.00390625 =0.88671875 原码 反码 补码 正数:原码反码补码均相同 负数: 原码:正数的原码,第一位变成1,代表负数 反码:符号位不变,其余数位取反 反码: 方案1:原码两头的1不变,中间取反 方案2:负数的反码+1即可 完全平方数 int n; int a[10000]; cin>>n; int ans=0; for(int i=0;i<n;i++) cin<<a[i]; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ int num=a[i]+a[j]; int k=sqrt(num); if(k*k==num) ans++; } } cout<<ans; 字母求和 int n; string s; cin>>n>>s; int ans=0; for(int i=0;i<s.size();i++){ if(s[i]>='a') ans+=s[i]-97+1; else ans-=s[i]; } cout<<ans; 单位转换 int n; cin>>n; while(n--){ int k; string s1,s2,s3,s4; cin>>k>>s1>>s2>>s3>>s4; cout<<k<<" "<<s1<<" "<<s2<<" "<<k; if(s1=="kg"&&s4=="g") cout<<"000"; else if(s1=="kg"&&s4=="mg") cout<<"000000"; else if(s1=="km"&&s4=="m") cout<<"000"; else if(s1=="km"&&s4=="mm") cout<<"000000"; else if(s1=="m"&&s4=="mm") cout<<"000"; else if(s1=="g"&&s4=="mg") cout<<"000"; cout<<<<" "<<s4<<endl; } 小猫分鱼(从小到大枚举最后一只小猫吃的鱼数) int k=1,y; while(true){ y=k*3+1; bool f=true; //验证 for(int i=1;i<n;i++){ if(y%(n-1)!=0) { f=false; break; } y=y/(n-1)*n+1; } //判断是否继续验证 if(f) cout<<y; else k++; } GESP1级:https://noicode.online/plus/search.php?kwtype=0&q=GESP+一级 GESP3级:https://noicode.online/plus/search.php?kwtype=0&q=GESP+三级 (责任编辑:admin) |