HZNU摸底测试题

编程入门 行业动态 更新时间:2024-10-06 14:31:44

HZNU摸底<a href=https://www.elefans.com/category/jswz/34/1741188.html style=测试题"/>

HZNU摸底测试题

第一题:驼峰命名法
题目描述
代码实现:

#include<bits/stdc++.h>
using namespace std;int main(){int t;cin>>t;string strp,str[101];while(t--){cin>>strp;int l=strp.length();str[0]=strp[0]-32; for(int i=1,j=1;j<strp.length();i++){if(strp[j]!='_'){str[i]=strp[j];j++;}else{l--;str[i]=strp[j+1]-32;j=j+2;}}for(int i=0;i<l;i++){cout<<str[i];}cout<<endl;}	 
} 

运行结果:

思路:找两个位置“” 和 “”之后的第一个字母,首先把首字母大写,后续遍历整个字符串找下划线的位置,如果没有遇到下划线就把当前的字符赋值给最后输出结果的字符。遇到下划线则把下标加上对应的值之后将字母变为大写存入结果字符串中。
这道题最后没有AC,我也一直没有找到具体的原因,后来又换了一种方法还是没有AC,现在也不知道是为什么。

第二题:JSON格式输出
题目描述:

代码实现:

#include<bits/stdc++.h>
using namespace std;
int loc(string s){int a=s.find(":");int j=0;for(int i=a+3;i<s.length();i++){//找字符串if(s[i]=='"'){j=i;break;}} return j;
}
int location(string s){//找数字 int a=s.find(":");int j=a+2;for(int i=a+2;i<s.length();i++){if((s[i]=='.'||(s[i]>='0'&&s[i]<='9'))&&s[i]!='}'){//cout<<j<<" ";++j;}}//cout<<a<<" "<<j<<endl;测试 return j;
}
map<string,string>json;int main(){string str,token;getline(cin,str);//getline cin是输入流 str是字符串,可以多行输入 stringstream sstr(str);//stringstream流类型,可以从string中读取数据 也可以向string中写入数据vector<string> s; int a,b;while(getline(sstr, token, ','))//getline函数进行字符串的提取s.push_back(token);for(int i=0;i<s.size();i++){string ss=s[i];cout<<s[i]<<endl;a=ss.find(":");if(ss.find("stu_id")!=ss.npos){b=location(ss);	json["stu_id"]=ss.substr(a+2,b-1);}else if(ss.find("isadmin")!=ss.npos&&ss.find("false")!=ss.npos){json["isadmin"]="false";}else if(ss.find("isadmin")!=ss.npos&&ss.find("true")!=ss.npos){json["isadmin"]="true";}else if(ss.find("email")!=ss.npos){b=loc(ss);json["email"]=ss.substr(a+3,b-2);}else if(ss.find("ip")!=ss.npos){b=loc(ss);json["ip"]=ss.substr(a+3,b-2);}else if(ss.find("password")!=ss.npos){b=loc(ss);json["password"]=ss.substr(a+3,b-2);}else if(ss.find("user_id")!=ss.npos){b=loc(ss);	json["user_id"]=ss.substr(a+3,b-2);}else if(ss.find("real_name")!=ss.npos){b=loc(ss);	json["real_name"]=ss.substr(a+3,b-2);}else if(ss.find("score")!=ss.npos){b=location(ss);//cout<<b<<endl;	json["score"]=ss.substr(a+2,b);}}cout<<"user_id = "<<json["user_id"]<<endl;cout<<"stu_id = "<<json["stu_id"]<<endl;cout<<"email = "<<json["email"]<<endl;cout<<"ip = "<<json["ip"]<<endl;cout<<"isadmin = "<<json["isadmin"]<<endl;cout<<"password = "<<json["password"]<<endl;cout<<"realname = "<<json["real_name"]<<endl;cout<<"score = "<<json["score"]<<endl;return 0;
}

运行结果:

排除一些测试数据,这里的结果有问题,输出时都会带上后半个引号,还有最后的大括号。未找到原因及解决办法。

思路:感觉自己的思路还挺清晰,实现起来就出现了问题。首先cin无法读入这样带有空格的一个字符串所以采用getline()的方法,getline()可以直接读入cin流分割字符利用这个函数,以逗号为分界存入vector中再对分割好的字符截取。
观察数据会发现,每段字符都会有“:”,实际分为三种一种是纯数字、一种为字符串,最后一个是判断是否为本机只有两种可能false/true;所以我定义了两个函数,一个处理纯数字,一个处理纯字符串,通过find()函数找到冒号的位置,字符串loc()函数以最后一个分号为结尾返回下标,数字location()则按照是否为0-9或者小数点判断最后返回的下标值。
main函数中利用字符串截取函数给出要输出的两个边界下标,最后把这些用MAP映射存储。

感觉还是边界出了问题但是测试了一天也没改出来,自己的思路还是有点奇怪。

第三题:贪吃蛇
题目描述:


实现代码:

#include<bits/stdc++.h>
using namespace std;
int main(){int n,m,x,y,t;while(cin>>n>>m>>x>>y>>t){if(n==0&&m==0&&x==0&y==0&&t==0){break;}int q;cin>>q;int a[100][2];for(int i=0;i<q;i++){int dir,time;cin>>dir>>time;a[i][0]=dir;a[i][1]=time;}for(int i=0;i<q;i++){if(i<q-1){if(a[i][1]<t){//时间在范围之内if(i==0){//变向之前默认向右y=y+a[i][1];if(y>m){//出界y=y%m;}}if(a[i][0]==0){//向上运动,x变化x=x-(a[i+1][1]-a[i][1]);if(x<0){//出界x=x%n+n;}}else if(a[i][0]==1){//向下运动,x变化x=x+(a[i+1][1]-a[i][1]);if(x>n){//出界x=x%n;}}else if(a[i][0]==2){//向左运动,y变化y=y-(a[i+1][1]-a[i][1]);if(y<0){//出界y=y%m+m;}}else if(a[i][0]==3){//向右运动,y变化y=y+(a[i+1][1]-a[i][1]);if(y>m){//出界y=y%m;}}}else{//因为给出的时间是递增的,如果其中有一环大于t了,那么剩下的不用看了if(i==0){//如果第一次就超出了时间限制y=y+t;if(y>m){//出界y=y%m;}}else{if(a[i-1][0]==0){//向上运动,x变化x=x-(t-a[i-1][1]);if(x<0){//出界x=x%n+n;}}else if(a[i-1][0]==1){//向下运动,x变化x=x+(t-a[i-1][1]);if(x>n){//出界x=x%n;}}else if(a[i-1][0]==2){//向左运动,y变化y=y-(t-a[i-1][1]);if(y<0){//出界y=y%m+m;}}else if(a[i-1][0]==3){//向右运动,y变化y=y+(t-a[i-1][1]);if(y>m){//出界y=y%m;}}}}}else{//如果是最后一次变向if(a[i][1]>t){//最后一次如果超出限制if(q>1){//如果第一次不是最后一次if(a[i-1][0]==0){//向上运动,x变化x=x-(t-a[i-1][1]);if(x<0){//出界x=x%n+n;}}else if(a[i-1][0]==1){//向下运动,x变化x=x+(t-a[i-1][1]);if(x>n){//出界x=x%n;}}else if(a[i-1][0]==2){//向左运动,y变化y=y-(t-a[i-1][1]);if(y<0){//出界y=y%m+m;}}else if(a[i-1][0]==3){//向右运动,y变化y=y+(t-a[i-1][1]);if(y>m){//出界y=y%m;}}}else{//若第一次就是最后一次,超出范围y=y+t;if(y>m){//出界y=y%m;}}}else{//如果最后一次的时间不超出界限if(a[i][0]==0){//向上运动,x变化x=x-(t-a[i][1]);if(x<0){//出界x=x%n+n;}}else if(a[i][0]==1){//向下运动,x变化x=x+(t-a[i][1]);if(x>n){//出界x=x%n;}}else if(a[i][0]==2){//向左运动,y变化y=y-(t-a[i][1]);if(y<0){//出界y=y%m+m;}}else if(a[i][0]==3){//向右运动,y变化y=y+(t-a[i][1]);if(y>m){//出界y=y%m;}}}}}cout<<x<<" "<<y<<endl;}return 0;
}

样例测试成功了能不能AC不知道

思路:(画图)用二维数组记录操作变化和时间,坐标轴是向右和向下为正,要注意几个边界的问题,一是否到达网格的边界二是否超出最大时间限制。根据上下左右四种方向变化每秒走一步直接加上对应的时间就是步数,然后判断是否到达边界,到达边界就返回。

第四题:A+B问题

代码实现:

#include<bits/stdc++.h>
using namespace std;int function_2(string a){//将字符串转化为数字int sum=0;if(a[0]=='-'){//负数for(int i=1;i<a.size();i++){sum=sum*10+(a[i]-'0');}return (0-sum);}else if(a[0]=='+'){for(int i=1;i<a.size();i++){sum=sum*10+(a[i]-'0');}}else{for(int i=0;i<a.size();i++){sum=sum*10+(a[i]-'0');}}return sum;
}
bool function_1(string a){//判断字符串里是否只有数字for(int i=0;i<a.size();i++){if(i==0){if(a[i]=='-'||a[i]=='+'||(a[i]>='0'&&a[i]<='9')){continue;}else{return false;}}else {if(!(a[i]>='0'&&a[i]<='9')){return false;}}}int a1=function_2(a);if((a1>=-100)&&(a1<=100)){return true;}
}int main(){string a,b;int t=100;while(t--){cin>>a>>b;if(function_1(a)&&function_1(b)){int c=function_2(a)+function_2(b);cout<<c<<endl;}else{cout<<"Incorrect Input!"<<endl;}}
}

不用测试就知道肯定不能AC,考虑错了情况
这是我看完所有题后做的第一题直接花费很久的时间还没做对

思路:定义函数判断是否只有数字,如果完全是数字则把字符串转换成数最后相加运算即可。
后来发现这不应该认为是两个字符串,应该看为一个字符串通过空格来分割。
后面的测试样例有只输入一个字符则应该输出错误,我的程序并不会排除这样的情况(所以不能AC)

最后两道还没有做的题
题目描述:


总结:以前接触过的天梯赛,我做的基本都是基础题,不会涉及较深逻辑,通过这次我发现自己首先无法准确判断题目难度,而且在一道题上需要思考的时间太久,说明自己接触这方面的训练还是太少了,之前都是联系PAT上的题目大多基础题叙述也比较简洁,很多暴力求解就可以做出来,但是碰到这样的问题暴力求解既浪费时间又得不到答案,还是应该从算法入手深入的学一学。

这里没做出来的题,没解决的BUG看了这两天不知道什么时候能解决了,漫漫长路,加油吧!

更多推荐

HZNU摸底测试题

本文发布于:2024-03-12 09:48:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1731239.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:测试题   HZNU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!