前言

大一大二天天吃喝睡觉,不喜写代码,导致编码能力薄弱,到了今时今日,无论是读研还是就业都逃不过上机考试这关,遂开始练习解题能力。

书籍:《计算机考研机试指南(王道第二版》

OJ平台:牛客网:考研复试专区

类型一:暴力计算

这类习题多为机试考试中的简单题和入门题。大多采用枚举等方法,由于数据量不大即使复杂度高也能完全跑出来。

奈何本人C语言基础实在过于将就,有些题目做起来依旧费劲。

1.反序数(THU)

输入一个数字,输出它的倒置数:
核心算法:每次循环取原数字的个位再将原数字除以10,revx保存倒置数,初始为0,每次循环*10再加上原数字的个位。

int Reverse(int x){int revx=0;while(x!=0){revx*=10;revx+=x%10;x/=10;}return revx;
}

2.佰鸡问题(HIT)

注意点:int相除除不尽会丧失精度,可通过数学变形避免分数

#include<iostream>using namespace std;int main(){int n;cin>>n;for(int x=0;x<=100;x++){for(int y=0;y<=100-x;y++){//必须注意,y的范围受制于x//if(5*x+3*y+(100-x-y)/3<=n){这里/3忽略了小数,所以错误,可以使用/3.0,自动转化double,提高精确度if(5*x*3+3*y*3+(100-x-y)<=n*3){//这样处理可以不用转化为doublecout<<"x="<<x<<",y="<<y<<",z="<<100-x-y<<endl;}}}return 0;}

3.与7无关(PKU)

4.火鸡 old bill(SJTU)

注意判断没有的情况,即判断价格到最后依旧=0

#include<iostream>using namespace std;int main(){int n;int sp=0;int x,y,z;int i,j;while(cin>>n>>x>>y>>z){//循环输入int xyz=100*x+10*y+z;for(int a=1;a<=9;a++){for(int b=0;b<=9;b++ ){if((a*10000+xyz*10+b)%n==0&&a*10000+xyz*10+b>=sp*n){sp=(a*10000+xyz*10+b)/n;i=a;j=b;}}}if(sp==0)//判断没有正确情况cout<<0<<endl;elsecout<<i<<" "<<j<<" "<<sp<<endl;}return 0;}

类型二:模拟输出

这类题目对我而言是个难关,这类题目没有高深的数学思想,能够比较纯粹的考察编码的细心和熟练。

1.叠筐

这个问题感觉还是比较奇特的

注意输出格式:每个之间空一行但最后一个没空行如何正确处理?

如何构造?规律是什么?

这道题确实花了很长时间,发现从内往外的规律,最里面第0层是字符A,往外交替,第偶数层A第奇数层B,填充四边的范围一定要精确,可以找个例子好好算一下范围。

#include<iostream>using namespace std;int main(){char matrix[80][80];int n;char a,c;bool firstK=true;while(scanf("%d %c %c",&n,&a,&c)!=EOF){if(firstK==true)//要求每个框之间有空行,最后一个框后面没有--》除了第一个框,其余所有框前面加一个空行firstK=false;elsecout<<endl;//输出一个框,思路:输出n*n矩阵最后去掉四个角,发现一层一层交替产生//填充一圈,需要知道用哪个?难点,知道最中心的是a,每层往外就是ca交替//最中心就是0层,最外层就是n/2层//需要知道每圈的长度:第i层边长:2i+1//从内往外数,偶数层为a,奇数层为c;char tmp;for(int i=0;i<n/2+1;i++){if(i%2==0)tmp=a;elsetmp=c;//填充四边for(int j=0;j<2*i+1;j++){matrix[n/2-i][n/2-i+j]=tmp;//上边matrix[n/2-i+j][n/2-i]=tmp;//左边matrix[n/2-i+j][n/2-i+2*i+1-1]=tmp;//右边matrix[n/2-i+2*i+1-1][n/2-i+j]=tmp;//下边}}if(n!=1){matrix[0][0]=' ';matrix[n-1][0]=' ';matrix[0][n-1]=' ';matrix[n-1][n-1]=' ';}for(int x=0;x<n;x++){for(int y=0;y<n;y++){cout<<matrix[x][y];}cout<<endl;}}return 0;}

2.U型字符串(ZJU)

U型尽量的正:n1n2n3尽量等,可以用n+2/3,多出来的给n2

#include<iostream>using namespace std;int main(){string s;while(cin>>s){int n=s.size();int n1=(n+2)/3;int n2=n+2-2*n1;//要求n1,n2,n3,尽可能相等且n2>=n1,均分三分多出来的给n2即可//控制输出for(int i=0;i<n1-1;i++){cout<<s[i];for(int x=0;x<n2-2;x++)cout<<" ";//打印n2-2个空格cout<<s[n-1-i]<<endl;}for(int i=n1-1;i<n1+n2-1;i++){//注意范围// cout<<s[i]<<endl;错误cout<<s[i];}cout<<endl;}}

类型三:日期类

1.打印日期(华科)

给出年年份m和一年中的第n天,算出第n天是几月几号。

输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。

可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。

关键:判断闰年,格式输出

输入:

2000 3
2000 31
2000 40
2000 60
2000 61
2001 60

输出:

2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
#include<iostream>using namespace std;int main(){int y,day;while((scanf("%d%d",&y,&day))!=EOF){int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};int daysR[12]={31,29,31,30,31,30,31,31,30,31,30,31};bool isR=false;//判断闰年:4的倍数或400的倍数且不能是100的倍数if(y%4==0&&y%100!=0||y%400==0)isR=true;//求日期int i;int d=0;int dd=0;for( i=0;i<12;i++){if(isR){if(d+daysR[i]>=day){ dd=day-d;break;}d+=daysR[i];}else{if(d+days[i]>=day){dd=day-d;break;}d+=days[i];//当时这里写反了检查了半天也没出来}}//cout<<y<<"-"<<i+1<<"-"<<dd<<endl;//不符合要求,题目要求输出格式2000-00-00//解决:printf("%4d-%02d-%02d",y,i+1,dd);}
}

2.日期累加(北理)

设计程序能计算一个日期加上指定天数后的日期

思路:不要钻牛角重复的判断今年闰明年后年啥情况。

正确思路是根据现有日期,求出今天是今年第几天,加上增加的天数,从而判断年份、月份、日期。

计算出today的天数+number=number,根据这个number判断年份是否增加(循环),根据这个number也可以推出日期。

#include<iostream>
#include <cstring>
using namespace std;int daysOfyear(int y){if(y%4==0&&y%100!=0||(y%400==0)){return 366;}else{return 365;}}
int isR(int y){bool isr=false;if(y%4==0&&y%100!=0||(y%400==0)){isr=true;}return isr;}int main(){int daysIR[12]={31,28,31,30,31,30,31,31,30,31,30,31};int daysR[12]={31,29,31,30,31,30,31,31,30,31,30,31};int mday[12];int num;cin>>num;while(num--){int y,m,d,number;int y1,m1,d1;//目标年月日值cin>>y>>m>>d>>number;//判断闰年//总方向:确定年月日//不要把程序思路复杂化//先确定年份//确定今天是该年的第几天,加上需要增加的天数来判断年份,之后判断月份日子if(isR(y)){//mday=daysR;memcpy(mday,daysR,sizeof(daysR));//两个参数,一个目的一个源}else{//mday=daysIR;memcpy(mday,daysIR,sizeof(daysIR));}for(int i=0;i<m-1;i++)number+=mday[i];number+=d;//cout<<number<<endl;//确定年份while(number>daysOfyear(y)){number=number-daysOfyear(y);y++;}y1=y;//再判断一下年份是否闰年,选用合适的日数表if(isR(y1)){//mday=daysR;memcpy(mday,daysR,sizeof(daysR));//两个参数,一个目的一个源}else{//mday=daysIR;memcpy(mday,daysIR,sizeof(daysIR));}//确定月日;根据number确定月日for(m1=0;number>0;m1++){if(number-mday[m1]<=0)break;number-=mday[m1];}m1=m1+1;d1=number;printf("%04d-%02d-%02d\n",y1,m1,d1) ;}return 0;}

刷题笔记(一)《王道计算机考研机试指南2》相关推荐

  1. 王道计算机考研机试指南刷题笔记-自用

    | 写在开头 前两周磨磨唧唧把第二章暴力求解枚举部分的例题和习题都AC了,思路都不太难,找到规律很快就能写出来,想着一定要写刷题笔记,把coding时遇到的困难都记录下来,方便以后复习,却也一直未曾动 ...

  2. 王道计算机考研机试指南二刷笔记-自用8

    目录 写在开头 第3章 排序与查找 3.1 排序 总结 3.2 查找 总结 写在开头 一刷到后面断更了,发现每题都写太浪费时间了. 一刷总结:数学问题.贪心.递归分治.数据结构二基本都刷完了,图论只刷 ...

  3. 王道计算机考研机试指南刷题笔记-自用7

    目录 例题4.4 统计字符(浙大复试上机题) 例题4.5 字母统计(上交复试上机题) 第5章 数据结构一 5.1 向量 例题5.1 完数与盈数(清华复试上机题) 5.2 队列 例题5.2 约瑟夫问题N ...

  4. 王道计算机考研机试指南刷题笔记-自用3

    | 2.2 模拟 3.其他模拟 例题2.9 KY25(清华大学复试上机题) 剩下的树__牛客网 (nowcoder.com) 1.总结 遇到的坑:直接把给出的区间右端点值减去左端点值+1得到这个区间移 ...

  5. 王道计算机考研机试指南自用刷题笔记-自用6

    目录 习题3.5 找最小数(北邮复试上机题) 习题3.6 打印极值点下标(北大复试上机题) 习题3.7 找位置(华科复试上机题) 第4章 字符串 4.1 字符串 4.2 字符串处理 4.1 特殊乘法( ...

  6. 王道计算机考研机试指南自用刷题笔记-自用5

    3.2 查找 例题3.4 找x(哈工大复试上机题) 找x_牛客题霸_牛客网 (nowcoder.com) 1.思路 简单题,定义一个数组存储输入的数字,定义一个flag标识是否找到x,对数组进行一次遍 ...

  7. 王道出版的机试指南_《王道论坛计算机考研机试指南》试读版.pdf

    <王道论坛计算机考研机试指南>试读版 王道论坛 王道论坛计算机考研机试指南 王道论坛 2013.01.06 写在前面的话 各位王道的小崽子们,今天你们考完初试了,感觉解放了吧?轻松了吧?无 ...

  8. 计算机考研机试指南(八)——数学问题

    机试指南 cha4 数学问题 % 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> ...

  9. 王道出版的机试指南_王道论坛计算机考研机试指南 四 排版题

    例2.7 输出梯形 (九度教程第14题) 时间限制:1秒 **内存限制:32兆 ** 特殊判题:否 题目描述: 输入一个高度h,输出一个高为h,上底边为h的梯形. 输入: 一个整数h(1<=h& ...

  10. 【读书笔记】《王道论坛计算机考研机试指南》第五章

    目录 第五章 并查集 最小生成树(MST) 最短路径 拓扑排序 第五章 并查集 本节讨论在图论问题中常常要使用到的一种数据结构一一集合,及其相关操作一一并查集. 我们先来看如下的数字集合: 集合A{1 ...

最新文章

  1. 题目1483:求最大最小数
  2. 与JBoss BPM Travel Agency更新了现代BPM数据集成
  3. 作为一名程序员,我站在人生的十字路口
  4. 全网最全的 Java各类技术栈 架构图汇总(建议收藏)
  5. mysql判断是否包含某个字符的方法
  6. 为什么promise就是微队列?setTimeOut就是宏队列?
  7. ES6、ES7、ES8、ES9、ES10 新特性ECMAScript版本简介
  8. jQuery EasyUI快速入门01
  9. 读书笔记《你真的理解什么是财富自由吗?》
  10. PHP RSA 报错 openssl_sign(): supplied key param cannot be coerced into a private key
  11. 九爷带你了解 mctop: 监视 Memcache 流量
  12. 最大回撤python_最大回撤,最大回撤恢复时间与最大回撤持续期
  13. 使用Html/Css简单创建一个菜单
  14. Android Studio往模拟器添加音乐
  15. Leecode159:至多包含两个不同字符的最长子串
  16. 三:Lambda表达式
  17. 数据分析师需要重点学习什么技能?
  18. REVV Racing 联手 SuperPlastic,为您带来 Chunder 迷宫锦标赛
  19. 职场人理财之指数基金篇
  20. 蒲丰投针与蒙特卡洛模拟

热门文章

  1. 手机计算机键盘技巧,【盲打计算器】看似简单,你不一定会的小技巧
  2. Unity 使用ParticleSystem.Simulate让粒子播放不受时间缩放影响和ParticleSystem.Simulate详解
  3. 关于TP5-微信H5支付
  4. 前端项目实战5:聊天对话框
  5. NB-IOT模块学习
  6. Jfree 数据可视化
  7. html5 java 微信商城_微信商城和H5商城区别是什么?
  8. 杰理之测试盒配置声道【篇】
  9. eplan p8详细安装步骤文库_eplan p8详细安装步骤
  10. 磁盘不见了只剩一个c盘_电脑磁盘忽然只剩c盘怎么回事_win10除了c盘都不见了的处理方法...