1.格式化输出整数

例子:

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174

printf("%04d - %04d = %04d\n",max,min,n);不满足的前面补0。用%04d即可。%04d就是不足4位数前面补0的意思。

比用cout输出要方便:

void print(int n){
//    if(n>0&&n<10)
//        cout<<"000"<<n;
//    else if(n>=10&&n<100)
//        cout<<"00"<<n;
//    else if(n>=100&&n<1000)
//        cout<<"0"<<n;
//    else
//        cout<<n;
}

2.四舍五入

int c=(int)((b-a)/100+0.5);//1.2+0.5==>1,   1.5+0.5==>2

3.加速cin,cout

在输入输出很大时可以加上这两句:

ios::sync_with_stdio(false);

cin.tie(flase);

注1:endl开销很大,可用‘\n’代替

注2:在pat中,输出一行空行,用printf("\n");会报格式错误,而cout<<"\n"就没事,很奇怪,先记在这。

血的教训:PAT甲级1013题,dfs+邻接表解决

要求:

就用cin,cout,不作任何处理

结果就ac了

4.字符串分割

4.1 用scanf(只能输入字符串的时候)

例如:01:01:06:01

scanf("%d:%d:%d:%d", &data[i].month, &data[i].day, &data[i].hour, &data[i].minute);

4.2 用string类

涉及到string类的两个函数find和substr:

string本身没有提供切割的方法,但可以使用stl提供的封装进行实现或者通过c函数strtok()函数实现。
1、find函数 
原型:size_t find ( const string& str, size_t pos = 0 ) const; 
功能:查找子字符串第一次出现的位置。 
参数说明:str为子字符串,pos为初始查找位置。 
返回值:找到的话返回第一次出现的位置,否则返回string::npos

2、substr函数 
原型:string substr ( size_t pos = 0, size_t n = npos ) const; 
功能:获得子字符串。 
参数说明:pos为起始位置(默认为0),n为结束位置(默认为npos) 
返回值:子字符串

5.读取字符串含空格或换行等

虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题。
当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。以下面的语句为例:

cin >> namel;

可以输入 "Mark" 或 "Twain",但不能输入 "Mark Twain",因为 cin 不能输入包含嵌入空格的字符串。

为了解决这个问题,可以使用一个叫做 getline 的 C++ 函数。此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。
getline 函数如下所示:

在<string>中的getline函数有四种重载形式:

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);

istream& getline (istream&& is, string& str);
读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。

函数的变量:

is    :表示一个输入流,例如 cin。

str   :string类型的引用,用来存储输入流中的流信息。

delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。

有用实例:

while(getline(cin,line))

(注意:这里默认回车符停止读入,按Ctrl+Z(Windows)(Ctrl+D(Linux))或键入EOF(参考MSDN)回车即可退出循环。)

6.计算两个时间的间隔

例如:起:01:01:06:01  终:01:01:08:03 间隔:122分钟,若是跨天跨月跨年,再去计算会十分麻烦,此时就可以找一个基准参照时间

例如00:00:00到dd:hh:mm,统统转化为分钟来计算,data[i].time = data[i].day * 24 * 60 + data[i].hour * 60 + data[i].minute;

两个时间都转为相对00:00:00的时间间隔后再相减,就是最后两者的时间间隔。

7.由二叉树的先序和中序得到后序,或者构造一颗二叉树

void postorder(int inL,int inR,int perL,int perR){if(inL>inR)//perL>perR也行return;int root=per[perL],k=0;while(k<inR&&in[k]!=root)k++;int leftnum=k-inL;postorder(inL,k-1,perL+1,perL+leftnum);//左子树递归(中序跟k的位置直接有关,先序跟k无直接关系,而是由中序k-inL得到左子树所含结点数,再间接可得位置)postorder(k+1,inR,perL+leftnum+1,perR);//右子树递归(同理)post.push_back(root);//打印或放入后序队列
}
void postorder(int root,int start,int end){//先序提供根结点信息root,左右子树大小的信息由中序的start和end提供if(start>end)return;int k=0;while(k<end&&per[root]!=in[k])//找到中序的根结点位置k++;postorder(root+1,start,k-1);postorder(root+1+k-start,k+1,end);//先序是根左右的结构,其右子树的根结点的位置必须先知道左子树大小,而左子树的大小有必须得根据中序得到post.push_back(per[root]);//打印或放入后序队列
}

构造二叉树写法:

Node *create(int postL,int postR,int inL,int inR){if(postL>postR)//相等时也成立return NULL;Node *root=new Node;root->data=post[postR];int k;for(k=inL;k<=inR;++k){//找到中序数组中左右子树的分割结点if(in[k]==post[postR])break;}int numLeft=k-inL;//左子树的结点个数root->lchild=create(postL,postL+numLeft-1,inL,k-1);root->rchild=create(postL+numLeft,postR-1,k+1,inR);return root;
}

一般取闭区间

postorder(0,0,n-1);

PAT做题过程中的一些方法技巧总结相关推荐

  1. ACM做题过程中的一些小技巧

    1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 大数据输入输出时最好不要用cin.cout,防止超时. 2.有时候int型不 ...

  2. 攻防世界杂项(misc)--新手练习区(详解十二道题完结,附件做题过程中使用到的各种工具和网站)

    攻防世界杂项(misc)–新手练习区(详解) 第一题:this_is_flag 题目描述:Most flags are in the form flag{xxx}, for example:flag{ ...

  3. mysql mmm坑_MySql之MMM部署过程中各种问题解决方法

    MySql之MMM部署过程中各种问题解决方法 发布时间:2020-05-06 11:47:56 来源:亿速云 阅读:155 作者:三月 下文主要给大家带来MySql之MMM部署过程中各种问题解决方法, ...

  4. 2021第十二届蓝桥杯B组省赛C/C++做题过程与反思

    2021第十二届蓝桥杯B组省赛C/C++做题过程与反思 ​ 鄙人大一,第一次有幸参加蓝桥杯b组c.以下是本人的做题全过程,注意了!!!!不一定是正确答案!! 如果有误,还请大佬们指点指点. 试题 A: ...

  5. tableView的plain样式的headerView的上拉过程中悬停解决方法

    tableView的plain样式的headerView的上拉过程中悬停解决方法 参考文章: (1)tableView的plain样式的headerView的上拉过程中悬停解决方法 (2)https: ...

  6. 改善监控过程中逆光的方法

    我们在安装红外摄像机的时候,往往都会遇到逆光的现象,那么此时我们都会采取什么方法和措施来改善这一的情况呢?比如我们在网点出入口安装红外摄像机是时候,遇到最大的问题是由于摄像机安装位置不当,监视画面上会 ...

  7. 丹佛斯变频器al13故障_丹佛斯变频器使用过程中的故障处理方法

    原标题:丹佛斯变频器使用过程中的故障处理方法 对于机器的使用方法懂行的人觉得很容易,但是如果是小白的话下面所介绍的故障处理方法就能很好的帮你解决机器运作问题. 丹佛斯变频器维修常见故障处理方法的相关介 ...

  8. ERROR CODE:0X8007000D Microsoft Office 2010在安装过程中出错 解决方法

    Microsoft Office 2010在安装过程中出错 解决方法 XP系统安装OFFICE 2010过程中遇到进度条回滚后提示:"Microsoft Office 2010在安装过程中出 ...

  9. 网吧服务器网络维护教程,网管员维护服务器过程中的反黑技巧

    网管员维护服务器过程中的反黑技巧 作者:佚名 编辑:李莲 2007-08-17 11:09 评论 分享 1.打补丁 微软的作风就是三天一小补,五天一大补,漏洞太多,补一点就好一点,使用"开始 ...

最新文章

  1. 合种侧柏、油松专车3天4000能量领证
  2. 南农Nature Microbiology一作顾少华:我与铁载体的这5年
  3. 让机器像人一样听音乐,Facebook开源Demucs项目
  4. 获取一篇新闻的全部信息
  5. Putty中文乱码的解决方法
  6. 基于docker在Ubuntu上搭建TensorFlow-GPU计算环境
  7. 基础知识(二)matlab与c++混合编程之经验笔记
  8. LeetCode 451. 根据字符出现频率排序(Sort Characters By Frequency)
  9. CAN笔记(16) CANOpen简介
  10. ajax ashx 请选择文件,ajax+jquery+ashx如何实现上传文件
  11. ExpandableListView点击Group动态获取Child数据源
  12. DeepL与有道翻译对比
  13. 织梦dedecms怎么改模板
  14. 小白重装系统步骤总结
  15. 常见物理量的量纲在OpenFOAM中的表示
  16. Linux服务器安装的anaconda下载库、包很慢
  17. 戴尔服务器r510怎么系统,DELLR510服务器上安系统.docx
  18. Linux压缩打包命令使用方法
  19. php中fwrite函数的用法,PHP函数fwrite的用法
  20. 知情人士:比特大陆创始人吴忌寒离开核心纯属谣言

热门文章

  1. 认识计算机综合题,第一章 认识计算机试题.doc
  2. 网吧无盘服务器2021,云更新无盘客户端
  3. 用java实现从txt文本文件批量导入数据至数据库
  4. unix编程书籍推荐
  5. 新人怎么发邮件,怎么给客户发一封得体的邮箱—TOM邮箱分享
  6. Android 多进程的基础使用及优缺点
  7. 北京航班延误_预测航班延误
  8. matlab添加文件夹语音_基于MATLAB的语音处理
  9. c语言微信昵称大全女生,微信昵称女生大全(精选210个)
  10. 线性离散系统的分析与校正