欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

tey zzj gesp考前复习

时间:2024-06-22 17:04 作者:admin 点击:
枚举:又称暴力搜索,列出所有可能性,通过条件进行筛选 模拟:按照题目流程进行编程 字符串及其函数: length() size() substr() substr(下标,长度) 从下标开始,截取固定长度 substr(下标

枚举:又称暴力搜索,列出所有可能性,通过条件进行筛选

模拟:按照题目流程进行编程

字符串及其函数:

   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)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%