关于《王道考研》的暴力求解和模拟图形的笔记
2020.1.7
今天是我备战机试的第一天,主要学习的是暴力求解和模拟图形的部分,下面是总结的内容。
暴力求解
暴力求解要看复杂度是否符合要求。基本上几万级别的运算都是绰绰有余的,下面有一些注意点。
反序数函数
int Re(int x){ int rx=0; while(x){ rx*=10; rx+=x%10; x/=10; } return rx; }
这个函数很重要,我觉得可以背下来。
百鸡问题
#include<iostream> using namespace std; int main(){ int big=0; int small=0; int tiny=0; int n; cin>>n; for(big=0;big<=100;big++){ //题干说的是总数限制,而钱数是自己输入的,所以不能用钱数限制 for (small=0;small<=100-big;small++){ //这个small=0一定要写,特别是用在内循环中时,否则会出现缺解的情况 tiny=100-small-big; if((n-small*3-big*5)*3>=tiny) //这个关于非整数的情况,为了防止边界值和类型转换的情况发生,可以用这种方法解决 { cout<<"x="<<big<<","<<"y="<<small<<","<<"z="<<tiny<<endl; } } } return 0; }
模拟图形输出
这一类我还没有完全的弄明白惹,但是有一点我觉得很有意义,是普适性的。
#include <iostream> //eg2.4 输出梯形 using namespace std; int main(int argc, const char * argv[]) { int h; //一小段笔记:这里必须这样做,首先是题目没有设定只有一组数据输入,所以一定要用循环; //其次,如果用死循环可能会导致超时 while (cin>>h){ int row=h;//行和列相等 int col=h+(h-1)*2;//列的计算公式 for (int i=0;i<row;i++) { for(int j=0;j<col;j++){ if(j<col-(h+2*i))//在有*之前都是空格 { cout<<" "; } else{ cout<<"*"; } } cout<<endl; } } return 0; }
这当中有一个注意点,就是
while(cin>>n)
的问题,这里必须这样做,首先是题目没有设定只有一组数据输入,所以一定要用循环;其次,如果用死循环可能会导致超时。