2020年2月9日 PAT

B1002 20 查找

  • 读取每一位的数字方法
while(sum)
{
    sum += sum % 10;
    sum /= 10;
}
char str[5][5]={'ling','yi','er','san','si'};
//虽然每个字符串开辟了五个空间 但是在输出的时候 `cout << str[1];` 只会输出已经初始化的部分
  • 给函数传递二维数组 一维数组
    • 传递二维数组的第二维必须要写上数字
    • 在这个函数里面对数组元素修改,就相当于对原数组进行修改
void func (int a[], int b[][5])
{
    //...
}
  • 左移运算符 <<
    • int 最大值2的31次方-1 (1<<31)-1 【必须加括号:位运算符的优先级小于算数运算符】
    • 为了避免相加超过int的范围 一般使用 (1<<30)-1
const int INF = (1<<30)-1;      // 1的30次方-1  == 0x3fffffff;
const int INF = 0x3fffffff;     // 7个f 
%md右对齐 可以超过m的长度
%0md右对齐 左边的空位用0填充
%.mf保留m位小数 (四舍六入五成双)
  • 想要四舍五入【rand(double x)函数】

    • 3.40 — 3
    • 3.45 — 3
    • 3.50 — 4
    • 3.55 — 4
  • typedef的功能

    • 给复杂的变量名七个简单的别称
    struct Student_name;    //结构体名
    typedef Student_name SN; //给这个结构体起个名称
    SN s1;
    SN s2;      //SN当做声明
    
    typedef long long LL;
    LL a = 12312354234;
    
  • 如果数组大小比较大 (大概10^6级别)需要定义在主函数外面,否则程序会退出。

    • 因为函数内部申请的局部变量来自系统栈,允许申请的空间小
    • 函数外的曲剧变量存储在静态存储区 允许申请的空间大,所以定义在主函数外面
  • string.h ------> memeset(a,0,sizeof(a)); 数组初始化

    • 建议初学者只使用memset赋值0/-1 因为memset是按字节赋值,即对每个字节赋同样的值,int的四个字节会被赋值为相同的值
    • 0的二进制补码全为0
    • -1的二进制补码全为1 不容易弄错
    • 如果要对数组赋其他的值 例如1 / 2 要使用fill函数
    • memset比fill执行速度更快
  • gets() 以\n作为输入结束

    • 在输入一个数后按回车 或者scanf完一个整数之后 要先用getchar() 吃掉换行符
  • puts() 输出字符串后 紧跟一个换行符

  • 字符数组的存储方式
    image_1e0kg6dlv1d8bam912hc1e8q4ct9.png-603.8kB


  • sscanf与sprintf
sscanf(str,"%d",&n)把str以%d的格式传入int型n从左到右
sprintf(str,"%d",n)把n以%d的格式写到字符数组str中从右到左

image_1e0kgnemcdrd1n6t1al386dl88m.png-724.2kB

  • sscanf还支持正则表达式 那么很多字符串的题目都将会迎刃而解

  • int *p1,p2;
    • 只会给第一个变量定义为指针类型 第二个变量定义为int型
  • int *p1, *p2, *p3;
    • 三个都定义为了指针类型
  • int *p; p+1是从p所指向的int型变量下一个的int型变量地址
  • int *p; p++ 还支持自增自减

  • ==等于运算符
    • 浮点运算会有误差
    • 通常取a落在[b-eps,b+eps]之间 就表明a==b 而经验表明 eps = 10^(-8)比较合适
    const double eps =1e-8;
    #define Equ(a,b) ((fabs(a-b))<(eps))
    
  • 一般的OJ每秒承受的运算次数大约是10e-7 10e-8
  • 对于O(n2)来说 n的规模为1000时还能运行 超过1000就很可能超时
  • scanf()返回值为成功读入参数的个数
    • 一般在黑色屏幕中是不会读取失败的 只有在到了文件末尾才会失败 返回-1
    • C语言中EOF代表-1
    • 在黑色框框中按ctrl+Z才能结束任务
while(scanf() != EOF){
    //...
}
while(gets(a) != NULL){
    //...
}
 

B1041 15 查找

  • VS一般使用scanf_s代替scanf 而PAT编译器仍然使用scanf
    • 所以在VS加s,提交的时候不加s 就能通过了

B1004 20 查找

  • scanf("%s%s%d",stu.name,stu.classes,&stu.score); //传字符串不用加地址符

B1032 20 查找 easy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值