复试上机指南之小技巧篇(1)
一、输入一组整数
这个就是输入一组整数,数组的话没法用,因为数组是定长的,所以我们采用
vector
结合cin.get()
进行判断。
int input;
vector<int> vec;//vector的好处就在是一个动态数组,我们可以在不指定长度的情况下,输入任意长度的数字
while(cin>>input){vec.push_back(input);if(cin.get()=='\n')break;
}
二、单链表的递归逆序输出
我们在机试中经常遇到单链表的逆序输出的问题,2018北理的机试题中规定必须采用递归、链表输出,所以必须得掌握。
void reverse_input_list(node *q){if(q->next!=NULL)reverse_input_list(q->next);cout<<q->data<<" ";
}
在使用的时候,采用头插或者尾插,建立好链表之后把头结点传入函数中,就OK了。
三、等腰梯形或者三角形
这也是机试中经常出现的点,虽然不难,但是有时候临时想还是考验逻辑能力的。
cin>>n;
for(i=0;i<n;i++){for(j=0;j<n-1-i;j++)cout<<' ';for(k=0;k<n+2*i;k++)cout<<'*';cout<<endl;
}
四、关于结构体
这一类题经常是以学生信息、成绩等为背景进行考察,这个是一个关于学生成绩输入,统计挂科两门以上的学生、输出信息,并按照每个人的挂科数目进行排序输出,这个难点在成绩的不确定。我是在结构体中定义了一个
vector< float> score.
typedef struct Student{string name;int no;//学号vector<float> score;
}student;
下面是具体的输入信息:
while(cin>>scor){if(scor == -1)break;s[cnt].score.push_back(scor);//cnt是结构体数组,表示第几个学生。
}
五、字符串中的小数,输出出来
我们经常遇到需要把一个字符串中的数字输出出来,可以是整数、小数、正负数(前面有正负号需要带着正负号)。首先是输入之后,我们需要进行判断。
cin>>s;int i;for(i=0;i<s.length();i++){if(s[i]>='0'&&s[i]<='9' || s[i]=='+'||s[i]=='-'){i=judge(i);//此处是第一次输入i,经过完整的判断在//输出完这个数字之后,下一个不符合判断条件的字符的开始//此处的i的精髓,judge()函数返回的是第一个不符合输出条件的字符的下标,我们用i接受这个//下标,对现在的i++再次开始判断是否符合进入判断的条件,精髓认真理解。}}
接下来就是进行小数、负数、正数、纯数字的输出了,其中还包括类似于+004.500这种数字输出为+4.5。
int judge(int i){//这个i是元素的下标。int flag=1;//负数输出时,将flag赋值-1,乘上输出的数。bool a=false;double point=1,num=0;//表示点,在查找的过程中,可以将.后面的数字呈上point。do{//在循环中会一直判断下一个字符是不是符合要求,.或者数字来操作。if(s[i]>='0'&&s[i]<='9'){//纯数字或者小数的精髓,通过设置point的值来使其不断*0.1,使得2.3333这种也可以输出。if(point>=1){num=num*10+s[i]-'0';}else{num=num+point*(s[i]-'0');point*=0.1;//考虑存在2.333这种情况。}}else if(s[i]=='-')flag *= -1;else if(s[i]=='+')a=true;else if(s[i]=='.')point*=0.1;}while(!endof(s[++i])&&i<s.length());if(a)cout<<'+';cout<<num * flag<<' ';return i-1;//在循环判断的时候,是判断符合条件的下一位是不是符合条件,所以i在返回时需要-1.
}
六、关于字符串的拼接问题
这个题是关于全排列的,意思是给a,b,c三个字符,输入n,加入n=2,那就输出aa,ab,ac,bb,ba,bc,cc,cb,ca,9最后再输出一共有几个,这个题我的思路是,一个string,一个vector< char> v;
if(n==1){show(v);return 0;}else{while(--n){v=fun(v,a);//此处必须带参数做,例:n=3,其运行情况是先n=2,此时循环结束之后,v中的字符为aa,ab,ac.....,之后再n--,n=1。//结果保存了之后返回给v,然后v再作为参数传回给fun,//此时的v是aa,ab,ac.....,然后继续拼接单个字符,以此类推n=4,n=5...}show(v); }
下面是fun函数,是用了一个返回vector的函数,因为每次这个返回的vector都要作为下一次循环的参数进行继续判断。
vector<string> fun(vector<string> v,string a){int i,j;vector<string> ve;for(i=0;i<v.size();i++){for(j=0;j<a.length();j++){string tem="";//初始化字符串为空tem+=v[i];tem+=a[j];ve.push_back(tem);}}return ve;
}
七、提取一个整数的每位数
就是在判断回文数、水仙花数的时候,我们需要知道输入数字的每一位,然后进行判断。
num=n;
len=0;
while(num){arr[len++]=num%10;//取余之后的结果存放在arr中,是从低位到高位的存放num/=10;//每次取余结束之后,/10,因为int是向下取整,所以123除10就是12.
}
八、辗转相除求最大公约数
int gcd(int a,int b){int t;if(a<b){///使a大b小t=b;b=a;a=t;}while((t=a%b)!=0){///余数不为0时a=b;///被除数作除数b=t;///余数作被除数}///余数总是比除数小return b;///最后整除的除数是最大公约数
}
九、读写文件
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int main(){char fname[20]="abc.txt";ofstream out(abc.txt);if(out.is_open()){out<<"Hello,file!"<<endl;}char buffer[1024];ifstream in("abc.txt"); if(!in.is_open()){cout<<"open file failed!"<<endl;exit(1);}while(!in.eof()){in.getline(buffer,256);cout<<buffer<<endl;}in.close();return 0;
}
复试上机指南之小技巧篇(1)相关推荐
- Git使用方法(三)-小技巧篇
Git使用方法(三)-小技巧篇 标签管理 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本. 创建标签 命令git tag <tagname>用 ...
- 测试手机新机软件,玩机小技巧 篇一:手把手教你快速验新机——写给剁手节买了新手机的值友...
玩机小技巧 篇一:手把手教你快速验新机--写给剁手节买了新手机的值友 2020-12-10 17:39:14 29点赞 97收藏 11评论 创作立场声明:本文旨在分享购入新机器后如何检验手机完好的小技 ...
- ibm x201 怎么清理内部_维修小技巧 篇五:ThinkPadX201i拆机换散热风扇清灰教程
维修小技巧 篇五:ThinkPadX201i拆机换散热风扇清灰教程 2020-11-25 21:45:44 16点赞 14收藏 42评论 创作立场声明:拆装有风险.拆装有风险.拆装有风险,欢迎收藏,点 ...
- 【实战 Ids4】小技巧篇:自定义登录页操作
今天的内容很简单,1分钟就能看完,5分钟就能学会,但是却是在我们平时开发中必须要学会的一个小知识点,我就不让大家走弯路了,直接看操作. 在平时的IdentityServer4开发中呢,我们都是根据官方 ...
- 轻松制作GIF动画!教你玩转PS时间轴之5个小技巧篇
通过前两篇文章,我们已经知道制作动画的基本知识的和技巧,下面通过5个非常有用的知识点跟大家更深入地探索PS时间轴.文末附上PSD,可以下载后自行分析动画技巧. 往期回顾: <新手指南!手把手教你 ...
- 第 7 节:前端面试指南 — 微信小程序篇(附面试题答案)
这周很多读者朋友都在「微信小程序」的视频了. 前 6 期没看的同学,建议先看完再来看这一期的,传送门: 第 1 期:「简历篇」含简历模板文件 第 2 期:「HTML篇」含面试题&答案 第 3 ...
- word日常排版——小技巧篇(非常实用)
1.一键保存WORD中的所有图片 如果WORD文档中全是图片怎么保存呢?一个个保存费时了.你可以这样一键全部保存: ① 选择文件功能选项卡,点击另存为 ② 将文件类型保存为网页(.html) ③ Wo ...
- 21考研复试上机常见题型、技巧与方法
第一章 入门模拟 题目要求输入T个数 while(T--) {cout<<T; } 题目要求输出用空格隔开,最后一个不带空格 for(int i = 0; i < n; i++) { ...
- 苹果系统小技巧 篇六:Mac的10个必备小技巧,原来Windows的功能早在Mac上实现了
一.开启Mac的多桌面 多桌面的功能是Mac开始有,后来Windows跟进的,不得不说这个功能对于管理文件确实很有帮助. 在触控板中三指向上滑动,即可添加或者删除桌面 2. 你可以在这些桌面来回切换, ...
最新文章
- hdu 4278 2012天津赛区网络赛 数学 *
- Linux课程第十三天学习笔记
- Silverlight 1.0 RC SDK 预览
- 您的光纤电缆和测试仪是否准备好用于400G以太网?
- Vue 实现左边导航栏且右边显示具体内容(element-ui)
- chainmaker 区块中最大交易数 block_tx_capacity设置 区块大小 区块容量
- LINUX下载编译signalwire-c
- 以后给孩子起名字不用发愁了,先存着
- ES07--性能调优03(全面考量)
- 【22/04】Chrome 里的请求报错 “CAUTION: Provisional headers are shown“ 是什么意思?
- JAVA常用工具类汇总
- Google BETA版本测试介绍
- Oracle查询数据表数据很少却很慢
- 帆软bi 观远bi_与电源bi一起加入
- 卷尺精度标准_卷尺的精度为多少mm 卷尺测量误差的原因有哪些
- video视频快进拖动限制
- linux彻底卸载nginx,linux彻底删除nginx
- 反向代理,正向代理,网关
- 股票资管分仓和期权资管分仓功能的区别及搭建
- 数据库 - 建模:实体关系图(ERD)