PAT甲级常用函数&操作备忘

PAT甲级常用函数&操作备忘


数组

数组的创建

  • 可变长一维数组(长为m)

    cin>>m;
    vector<int>v(m);
    
  • 可变长二维数组(m行5列)

    cin>>m;
    vector<vector<int>> v(m, vector<int>(5));
    

数组的初始化

  • 对于定长数组,通常有如下操作:

    #include<string.h>
    int a[5];
    memset(a,0,sizeof(a));
    
  • 对于vector数组不能使用memset指令,但可以转换思路,既然是初始化数组,就相当于一个新的数组了,故可以直接新建一遍,相当于初始化。

    vector<int>v(5,0);//长度为5,内容填充0
    cout<<v[1]<<endl;//输出0
    vector<int>v(5,1);//长度为5,内容填充2
    cout<<v[1]<<endl;//输出1
    

数组的排序

vector<int>v;
//整段排序
sort(v.begin(),v.end());
//对字段下标为[i,i+len)的长为len的字段排序
sort(v.begin()+i,v.begin()+i+len);

数组的输出控制(中间空格,末尾换行)

forint i=0;i<n;i++printf("%d%c",a[i]," \n"[i==n-1]);

数值运算

平方、开方、绝对值计算

#include <math.h>
//平方 
int a = pow(4,2);// 4的平方=16
//开方
int b = pow(4,0.5);// 4的平方根=2
int c = sqrt(4);// 4的平方根=2
//整数绝对值
int c = abs(b-c);
//浮点数绝对值
double d = fabs(b-c);

位运算

若给每个二进制位赋予一个答案含义,比较两串答案的操作可以化成二进制进行比较。

位运算操作符号含义
按位与&(取交集)同为1才是1,其余为0
按位或|(取并集)只要有1,就是1
按位异或^不同就是1,相同取0
取反~0变1,1变0
左移<<
右移>>

例如四选二的题目里标准答案是ac,学生答案是bc有

true_opt=hash['a'-'a']+hash['c'-'a'];//ac: 101  (5)
opt=hash['b'-'a']+hash['c'-'a']//bc: 110  (6) //亦或运算,找区别
if((true_opt^opt)==0)cout<<"与正确答案一致";//标记出和标准答案不一样的选项 else
cout<<"与正确答案不一致"; //或运算后判断相等,看有无错选
if((true_opt|opt)==true_opt)cout<<"学生答案是正确答案子集,没有多选错误答案"; else
cout<<"出现正确答案之外的选项"; //与hash表的交若不为0,则当前hash表的值对应选项已被选中 for (int k = 0;
k < 4; k++)
    if ( (true_opt^opt) & hash[k])
    	printf("%c",'a'+k);//通过与hash的二进制位依次比较,获得已选答案

最大公约数

int gcd(int a,int b)
{
    return !b?a:gcb(b,a%b);
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值