关于《王道考研》的暴力求解和模拟图形的笔记

2020.1.7

今天是我备战机试的第一天,主要学习的是暴力求解和模拟图形的部分,下面是总结的内容。

暴力求解

暴力求解要看复杂度是否符合要求。基本上几万级别的运算都是绰绰有余的,下面有一些注意点。

  1. 反序数函数

     int Re(int x){
     int rx=0;
     while(x){
         rx*=10;
         rx+=x%10;
         x/=10;
    
     }
     return rx;
    }

    这个函数很重要,我觉得可以背下来。

  2. 百鸡问题

    #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)的问题,这里必须这样做,首先是题目没有设定只有一组数据输入,所以一定要用循环;其次,如果用死循环可能会导致超时。