2020年 华东师大研究生机试题

A. 钥匙

代码:

#include <iostream>
using namespace std;

int main(){
    int n,k;
    cin>>n>>k;
    int key[n];
    for(int i=0;i<n;i++)
        cin>>key[i];

    int pos=0,door=0,sum=0,t=0;
    while(k!=0){
        if(key[pos]!=door+1){
            pos=(pos+1)%n;
            t++;
        }
        else{//key[pos]==door+1
            door=(door+1)%n;
            sum=sum+t;
            k--;
            t=0;
        }
    }
    cout<<sum<<endl;
}

B. 上古计算机

代码:

#include <iostream>
#include <map>
using namespace std;

map<string,int> m;//用索引方式存储寄存器对应值

void mapinit(){
    m["AX"]=0;
    m["BX"]=0;
    m["CX"]=0;
}

int main(){
    mapinit();
    string str,commd,reg1,reg2;
    int num;
    while(getline(cin,str)){
        commd=str.substr(0,str.find(' '));
        reg1=str.substr(str.find(' ')+1,2);
        if(str.find(',')!=string::npos)//也可以写作str.find(',')!=-1 或 str.find(',')!=str.npos
            reg2=str.substr(str.find(',')+1);
        if(commd=="IN"){
            num= stoi(reg2);
            m[reg1]=num;
        }
        else if(commd=="MOV"){
            m[reg1]=m[reg2];
        }
        else if(commd=="ADD"){
            m[reg1]=m[reg1]+m[reg2];
        }
        else if(commd=="SUB"){
            m[reg1]=m[reg1]-m[reg2];
        }
        else if(commd=="MUL"){
            m[reg1]=m[reg1]*m[reg2];
        }
        else if(commd=="DIV"){
            m[reg1]=m[reg1]/m[reg2];
        }
        else if(commd=="OUT"){
            cout<<m[reg1]<<endl;
        }

    }
}

注意:可以直接使用c++自带函数实现类型转换

stoi() 和 atoi()

这两个功能虽然都是将字符串转化为 int 类型,但是还是有区别的,

stoi 的参数是 const string* 类型

atoi 的参数是 const char* 类型

stoi() 会对转化后的数进行检查,判断是否会超出 int 范围,如果超出范围就会报错;

atoi() 不会对转化后的数进行检查,超出上界,输出上界,超出下界,输出下界;

还有一点,如果使用 atoi 对字符串 string 进行转化的话,就需要 c_str() 函数将 const string* 类型 转化为 cons char* 类型

to_string()

功能:将数字常量(int,double,long等)转换为字符串(string),返回转换好的字符串

这个就没有那么多注意的地方了,记住功能和使用方法就可以了;

用法测试:

#include <iostream>
using namespace std;

int main(){
    string str="12345";
    cout<<stoi(str)<<endl;
    cout<<atoi(str.c_str())<<endl;

    int num=12345678;
    cout<<to_string(num)<<endl;
}

C. 安全驾驶

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int main(){
    int total;
    cin>>total;
    int n;
    cin>>n;
    int distance[n],speed[n];
    double time[n];
    for(int i=0;i<n;i++){
        cin>>distance[i]>>speed[i];
        time[i]=(total-distance[i])/(speed[i]*1.0);
    }

    sort(time,time+n);
    printf("%.6lf\n",total/time[n-1]);

}

D. 表面积

代码:

#include <iostream>
#include <algorithm>
using namespace std;

struct obj{
    long long r;
    long long h;
};

bool compare1(obj x,obj y){
    return x.r>y.r;
}

bool compare2(obj x,obj y){
    return x.r*x.h>y.r*y.h;
}

int main(){
    int n,m;
    cin>>n>>m;
    obj o[n];
    long long res[n];
    for(int i=0;i<n;i++){
        long long r0,h0;
        cin>>r0>>h0;
        o[i].r=r0,o[i].h=h0;
        res[i]=0;
    }

    sort(o,o+n, compare1);
    for(int i=0;i<=n-m;i++){
        res[i]+=o[i].r*o[i].r+2*o[i].r*o[i].h;
        sort(o+i+1,o+n, compare2);
        for(int j=0;j<m-1;j++)
            res[i]+=o[i+j+1].r*o[i+j+1].h*2;
        sort(o,o+n, compare1);
    }

    sort(res,res+n);
    cout<<res[n-1]<<endl;

}

注意:这里所有数据都要用long long型,不然没法AC。

E. 达到回文数

代码:

#include <iostream>
using namespace std;

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

int IsHuiwen(int x){
    if(x== Reverse(x)) return 1;
    else return 0;
}

int main(){
    int n;
    cin>>n;
    int count=0;
    while(IsHuiwen(n)==0){
        n=n+ Reverse(n);
        count++;
    }
    cout<<count<<" "<<n<<endl;
}

声明

文章部分内容来自:https://blog.csdn.net/qq_40394960/article/details/109131894

文章部分习题来自:https://acm.ecnu.edu.cn/

全部评论

相关推荐

不困不吃饭:个人作品放链接里边。另外字太多了,无法删减的话可以用加粗注明关键的地方(不要全加粗了,只标记关键点)。个人能力往下边放,学历放最上边,如果说你觉得学校不好怕被刷掉的话,那就把实习经历放上边。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务