IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【第十三届蓝桥杯备战】C/C++解题时的一些个人小技巧和注意事项(持续更新中) -> 正文阅读

[C++知识库]【第十三届蓝桥杯备战】C/C++解题时的一些个人小技巧和注意事项(持续更新中)

【第十三届蓝桥杯备战】C/C++解题时的一些个人小技巧和注意事项(持续更新中)


先说一些废话:我最近觉得写算法题就像是打格斗游戏一样,格斗主要分为 确认确认后的连续进攻两个过程。 确认考验的是选手迅速切入问题的能力,也就是基本确定了使用什么算法来解决问题;而 确认后的连续进攻即将自己练习的连招准确无误地打出来,这个考验的是选手的熟练度。对于算法高手而言,他们的算法积累无疑都是非常深的,手速也很快,因此对他们而言,谁的 确认问题的速度更快,谁就在比赛中更有优势。但对于笔者这种菜鸟来说,即便碰巧偷了问题的“下盘”,也往往会在使用连招过程中失误,从而导致 断连,最终被问题一击KO。为什么会 断连?简单来说,是因为练习不够,但可以进一步细分为两部分:一个是算法熟练度低,另一个是没有形成一个快速稳健的编码习惯,比如总是在输入输出上卡壳,调试时总是反复手敲数据等等,当然这主要还是对语言掌握不深以及经验不足所致。

本篇不着重于具体问题的算法流程,主要分享个人认为的算法之外的一些注意点以及编码技巧。确保在已知解题算法的前提下能用“一套连招快速带走”题目,而不至于惨死在算法之外的方方面面。这样也可以让我们把更多精力放在算法设计方面,避免浪费大量时间。

输入输出

  1. 考虑到效率问题,标准输入输出尽量用scanf()printf(),且尽量不要将std::cinscanf()以及std::coutprintf()混着用(有时会出现问题,比如下面的情况,用于加速std::cin和std::cout,此时绝对不能把C和C++的输出混着用,具体实例见[1])。
	std::ios::sync_with_stdio(false);  // 取消cout和printf的兼容,此后不能将输出流混用
	std::cin.tie(0);  // 解除std::cin和std::cout的绑定
  1. long long类型的输入输出:scanf("%I64d", &n);。注意是字母I(i),不是l(L),且一定是大写。

  2. 输出带前导零的整数,比如时间格式HH::MM::SS,打印语句应为printf("%02d:%02d:%02d\n", h, m, s);,其他情况依此类推。

调试

  1. 可以用freopen函数进行输入输出流的重定向,把数据放在文件里,笔者这里给个简易调试模板,默认情况下在执行代码的当前文件夹下新建一个名称为in1.txt的文件,用于存放用例输入,注意数据文件第一行为用例的数目;提交代码时只需要把#define DEBUGMODE注释掉即可。
    #include<iostream>
    #include<cstdio>  // freopen()在此标准库中 
    using namespace std;
    #define DEBUGMODE  // 提交代码时注释掉即可
    
    int main(){
    	int tCase = 1; // 测试用例数目 
    	#ifdef DEBUGMODE
    	freopen("in1.txt", "r", stdin);
    	scanf("%d", &tCase);
    	//freopen("out1.txt", "w", stdout); // 如果想把结果保存到文件,取消该句注释 
    	#endif	
    	while (tCase--){
    		// 在这里放置算法的代码
    		// ...
    	}
    	#ifdef DEBUGMODE
    	cin.get();  // 用stdout时,避免界面直接关闭,从而看不到输出结果
    	cin.get();  
    	#endif
    	return 0;
    }
    

如果本文有描述不妥的地方,或是有更好的方案,欢迎交流与指正!

References

[1] LT-Y. sync_with_stdio(false)的副作用[EB/OL]. https://www.cnblogs.com/Little-Turtle–QJY/p/13832888.html, 2020-10-17.

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:14:26  更:2022-03-12 17:14:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:24:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码