算法题常用技巧C++
刷题常用技巧C++
常用头文件
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include<bits/stdc++.h>
这个是万能头文件,但是部分编译器不支持,个人建议还是不要依赖它,它还会延长你的编译时间。
短除法
数学意义上的短除法运算方法是先用一个除数除以能被它除尽的一个质数,以此类推,除到商是质数为止
常用于求最大公约数和最小公倍数
int MaxComDiv(int a,int b)//大的值为b
{for(int i=a;i>=1;i--) //两个数互质时,最大公约数为1if(a%i==0 && b%i==0) return i;
}
最小公倍数 = a*b /最大公约数
int MinComMulti(int a,int b)
{return a*b/MaxComDiv(a,b);
}
递归辗转除法也可以用于上述问题
int MaxComDiv(int a,int b)//a,b大小关系不定
{ if(a==0) return b;return MaxComDiv(b%a,a);
}
数组
定义动态数组(根据键盘输入的值来创建数组)
int n;
cin>>n;
int *a=new int[n];
计算数组中元素个数的三种方法
①使用库函数strlen()
len = strlen(str);
②使用while循环
int i=0;
while(a[i++]!='\0');
③使用函数sizeof()
len = sizeof(a)/sizeof(a[0]);
但是并不能直接计算一个数组中输入的数据的个数,因为没有输入数据的单元会被赋值为0(相当于我们手动输入了0进去,所以上面的方法不能直接得出我们真正输入的数据的个数),可以考虑使用队列Q,因为队列用多少就申请多少空间,Q.size()函数可以计算出当前输入的数据的个数。
队列
声明一个队列以及队列中常用的一些函数
#include <queue>
#include <iostream>
using namespace std;int main()
{ int i;queue <int> myQ; for(i=0; i<10; i++) myQ.push(i);cout<<"myQ size is: "<<myQ.size()<<endl;for(i=0; i<myQ.size(); i++) { cout << myQ.front()<<endl; myQ.pop(); } cout<<"myQ size is: "<<myQ.size()<<endl;cout<<"myQ last is: "<<myQ.back()<<endl;return 0;
}
常用的关于队列的函数的解析
使用EXCEL表格取巧求值
有的题目给出一些很麻烦且繁多的数据,不方便利用代码求解时,我们可以直接利用Excel里面自带的函数直接进行计算,非常方便。
如下图所示
①给定两列初始数据,求他们的乘积
②先点击一个单元格,用来输出计算的结果(如上:C1单元格)点击左上角的插入函数
可以在搜索函数中输入公式的描述,点击转到,会直接给出相近描述的公式,这里我们要用到PRODUCT函数,计算所有参数的乘积。如果不知道怎么描述,也可以自己对照下面给出的中文释义找合适的函数,就是很麻烦
当然也可以直接在后面的单元格中直接输入 = A1 * B1,再按回车,就可以得出结果了,但是这需要我们很熟悉这个函数在excel里面的公式,有的公式我们也不知道excel里面是怎么定义的
③A1:B1是从单元格A1到单元格B1中间所有的单元格数据(包括A1,B1)按照该函数进行计算
④点击确定,然后就可以得出结果了
⑤长按C1单元格往下拉,就可以将剩下的行数据按照第一行的函数计算出来了
⑥使用“自动求和”域名中的函数进行计算
先选中需要计算的单元格,然后点击相应的函数即可求值
(1)求之前的结果的总和
(2)求之前的结果的最大值
文件的读写
有一些题目,它会给一个存储了许多数据的文本文件,让我们去读取它,亦或者我们自己需要利用文件读写去方便的输入数据进行测验,这时就需要利用文件读写方面的函数了。
程序所用的数据可以从磁盘文件读取(称为读文件),程序运行的结果可以存到磁盘文件(称为写文件)。
①从键盘文件读取数据,写到磁盘文件
#include <iostream>
using namespace std;void main()
{FILE *fp; //定义文件指针char ch;fp=fopen("11.txt","w"); //以“写”的方式打开工程目录下的文件,如果没有该文件,则系统会自动创建if(!fp) //判断文件是否可以打开,注意:文件是否能打开的前提是文件已经存在,只要不出现下面的提示信息,就说明文件已经存在于工程目录之中{cout<<"File could not be opened !";exit(1);} cout<<"input a text (to end with'#')"<<endl;//输入提示,输入一段文本(以#结束)ch = getchar(); //读入第一个字符while(ch!='#'){fputc(ch,fp);ch = getchar(); //继续读入下一个字符}fclose(fp); //关闭文件
}
还要注意的一点是:如果原来的文件中已经有了数据,则我们这次输入的数据会覆盖掉之前的数据。
②从磁盘文件读取数据,写到显示器
#include <iostream>
using namespace std;void main()
{FILE *fp; //定义文件指针char ch;fp=fopen("11.txt","r"); //以“读”的方式打开工程目录下的文件if(!fp) //判断文件是否可以打开,注意:文件是否能打开的前提是文件已经存在,只要不出现下面的提示信息,就说明文件已经存在于工程目录之中{cout<<"File could not be opened !";exit(1);} ch = fgetc(fp); //先从文件中读取第一个字符while(! feof(fp)){putchar(ch); //输出该字符ch = fgetc(fp); //继续从文件中读取下一个字符}fclose(fp); //关闭文件
}
暂时先写这些吧,以后再更,大家加油呀!!!
算法题常用技巧C++相关推荐
- 刷算法题常用的 JS 基础扫盲
大厂技术 高级前端 Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 介绍 此篇属于前端算法入门系列的第一篇,主要介绍常用的数组方法.字符串方法.遍历方法.高阶函 ...
- AcWing算法题常用代码模板
一.基础算法 1.常用代码模板 快速排序算法模板 -- 模板题 AcWing 785. 快速排序 算法步骤: ①确定分界点 ②调整区间 ③递归处理左右两段 Tips: ①如果输入数据量 ...
- java算法题常用到的一些api,含面试题+答案
一面(电话面+后期在线coding) ①你们为什么要使用mongdoDb?你们的这个系统中涉及到哪些表? ②hytrix 的实现原理是什么?隔离策略有哪些?你们使用的是哪一些?你们项目中哪些地方使用到 ...
- 直播 | SemEval-2020自由文本关系抽取冠军方案解读(附NLP竞赛常用技巧总结)
「PW Live」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交 ...
- 【c/c++】刷算法题时常用的函数手册 持续更新--
在做算法题的时候,有时候为了高效的做题,我们会使用一些函数,但是常用的函数确实太多了,时不时的会忘记一些 于是我整理了一些常用的函数,方便自己查找和别人使用. 都是超链接,点击直接跳转到对应的内容. ...
- 《算法笔记》第4章常用技巧及排序算法
文章目录 二. 常用技巧 1. 散列 2. 递归 2.1 全排列问题 2.2 n皇后问题 2.3 回溯法优化n皇后问题 3. 贪心 3.1 简单贪心 3.2 区间贪心 4. 二分 4.1 二分查找 4 ...
- 《算法笔记》第4章常用技巧
文章目录 常用技巧 1. 散列 2. 递归 2.1 全排列问题 2.2 n皇后问题 2.3 回溯法优化n皇后问题 3. 贪心 3.1 简单贪心 3.2 区间贪心 4. 二分 4.1 二分查找 4.2 ...
- c算法题中各种输入和输出方法技巧详解!
文章目录 引言 导入io库 输入 各种输入方法 `scanf` 格式说明符 基本示例 读入整数 读入其他类型的数字 读入单个字符 读入字符串 扫描字符集合 `getchar()` `gets()` ` ...
- 解决算法题的一些技巧和经验
始于2021-4-1,终于写完所有的题. 不要向人借款,也不要借钱给别人,因为把钱借出去,往往不仅没有了钱财,也丢失了朋友:而向人借钱的后果,容易让人养成懒惰的习惯. 莎士比亚著名戏剧<哈姆雷特 ...
最新文章
- SAP采购订单下传SRM
- 局部特征(4)——SIFT和SURF的比较
- iOS 二叉树相关算法实现
- 为资产分类定义折旧范围_SAP 固定资产的配置与逻辑 -
- 一个间歇性进程hang问题的处理
- 模板 - 计算几何(合集)
- R语言:data.table语句批量生成变量
- 白话区块链 之 11 - 区块链的链 是什么?
- 服务器显示ipv4问题,IPv4会出现哪些问题
- win10计算机错误代码,win10电脑更新失败提示错误代码0x80070424修复方法
- proftpd服务器搭建
- JDK11下J2Cache序列化器反射异常及--illegal-access解决方案
- 【渝粤题库】广东开放大学 建筑测量 形成性考核
- 【Java学习笔记】接收命令行参数输出指定个数的斐波那契数列
- MAX8722 CCFL背光控制器
- 股票基础知识(入市必读)
- ThreadLocal在多线程中的作用和原理浅析(模拟学生入学报到场景)
- 日本教育家多湖辉的《学生用功术》---2
- html实现开心消消乐小游戏
- 马云:大数据云计算是阿里未来核心战略
热门文章
- 108964-32-5,荧光钙探针 Fura 2-AM,FURA-2AMFURA,2-AM SPECIAL PACKAGING
- libipq动态防火墙的入门实验
- 从莉莉丝游戏的战略布局与设计角度,探究《剑与远征》的火爆原因
- 碰撞检测——碰撞检测函数
- v-show不起作用
- String.matches() 与 Matcher.matches() 的区别
- 2008 R2 服务器 频繁自动重启 有能解决的方案吗
- python爬去百度文库资料_python urllib爬取百度云连接的实例代码
- cic曲线是什么_国际经济学6章经济增长与国际贸易.ppt
- ds1302模块 树莓派_Arduino控制DS1302时钟芯片(ds1302引脚图及功能和应用电路)