概述
这是我第三次参加转专业的机试了。现在也大二了,参加机试的同学也少了许多。这次过了四题,总的感觉比上学期稍微难了一点。不过变化不大
相关链接
2019-5转专业一志愿机试题目
2019-6转专业二志愿机试题目
机试一共有五道题目,考试时间一个半小时,做出三题才可以进入面试环节,不过仔细看这些题目就能发现,前三道题目都不算很难,所以考试的时候一定不能着急,也不要慌,时间完全够用。我之前几次考试就是过度紧张,导致不能静下心来看题,调试出了bug也是半天找不出来,这时候再看一眼榜单,别人都解出3,4题了,这时候就更慌了,形成恶性循环。所以考试千万不能慌,再紧张也帮不了自己做题,另外就是读题一定要仔细,一定一定要看清题目再去写,要是题目看到一半,感觉自己见过类似的题就直接去写很可能写错,回过头来再看也会浪费时间,所以一定要完全理解题目再去写,不差这几分钟的,希望大家考试都能够顺利通过,哈哈。
题号 | 题目 |
---|---|
2106 Problem A | 一寸光阴一寸金 |
2107 Problem B | 1号字符处理机器 |
2108 Problem C | 整理数据策略1 |
2109 Problem D | 旋转的方阵 |
2110 Problem E | 报数游戏 |
Problem A: 一寸光阴一寸金
Description
时间宝贵,我们要珍惜它。
Input
无输入。
Output
输出样本示范内容,行末要回车。
Sample Input
无
Sample Output
An inch of time is worth an inch of gold!
依旧是签到题,别忘了加换行
#include<iostream>
using namespace std;
int main()
{
cout<<"An inch of time is worth an inch of gold!"<<endl;
return 0;
}
Problem B: 1号字符处理机器
Description
有一台字符处理机器,对输入的字符串(串长小于200)做如下处理: 无论什么样的输入组合都会被转换成由A到Z的大写字母集构成的字母序列。对于输入的每个字符按其ASCII码值T的不同按以下规则转换:1)若T不是质数,那么将该字符转为以’A’起始的顺序第M个字母(M为T模26后的值);2)若T为质数,那么将该字符转换为以’Z’为起始的逆序第M个字母。
Input
按行输入多个字符串。每个字符串长度不超过200。
Output
对每一行字符串按照描述进行转换。每行对应输出转后的大写字母序列,行末回车。
Sample Input
0123456789
ABC
Jennie Is A Nice Girl. She Is 18 Years Old.
??Really?&*AbaC% appE !
1 a 2 A 3 $b+123
Sample Output
WXYZAYCDEF
NOK
WCGGBCGELGNGABVCGGBKEUGUACGELGXEGOCGKLGYEWU
LLECGEERLMQNUGKOGGIIRGH
XGGGYGNGZGKUIXYZ
和前几次的机试题型一样,同样是一道字符串处理,这次变难了一点,增加了一个素数的判断,其它的就没什么啦
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
bool judge(int n)
{//判断素数的函数,我这个写法不太常见。
if(n<4)return n-1;
if(n%6!=1&&n%6!=5)return false;
int k=sqrt(n);
for(int i=5;i<=k;i+=6)
{
if(n%i==0||n%(i+2)==0)return false;
}
return true;
}
int main()
{
string s;
while(getline(cin,s))//读入一整行,包括空格
{
int l=s.length();
for(int i=0;i<l;i++)//遍历每个字符
{
int m=s[i];
int M=m%26;
if(judge(m))
{
s[i]=(char)('Z'-M);
cout<<s[i];
}
else
{
s[i]=(char)('A'+M);
cout<<s[i];
}
}
cout<<endl;
}
return 0;
}
Problem C: 整理数据策略1
Description
给定n个正整数数据(n<200, 数据宽度都是5位;假定每个数构成位N5 N4 N3 N2 N1); 按其中的N2和N4合成的数据(N2N4)的大小进行升序整理,然后输出整理后的数据集。
Input
多组输入,每组输入格式为数据个数n和n个5位数。
Output
每组输出按第2位和第4位合成的数据进行升序整理的结果。每个数据之间一个空格间隔,尾数据后无空格。
Sample Input
5 12345 56778 89123 56783 56724
5 13151 13141 13131 13121 13111
Sample Output
56724 89123 12345 56778 56783
13111 13121 13131 13141 13151
这题涉及到排序,用结构体存放每个数据,自定义排序规则即可。
考试时还有个小插曲,当时系统里的测试数据给错了,导致提交后过不了,后来找老师后才改正。所以如果发现题目有问题,一定要跟老师反馈,如果影响比较大,后台老师也会适当延长考试时间
#include<iostream>
#include<algorithm>
using namespace std;
struct st{
int x; //原本的数字
int y; //N2N4组合后的数字
};
bool cmp(const st & a,const st & b)
{ //自定义排序规则,按结构体st中y的值从小到大排序
return a.y<b.y;
}
int main()
{
int n;
while(cin>>n)
{
st *a=new st[n]; //动态分配一个结构体数组
for(int i=0;i<n;i++)
{
cin>>a[i].x;
int m=(a[i].x/10)%10;
m=m*10+(a[i].x/1000)%10;
a[i].y=m; //m即为处理后的数字
}
sort(a,a+n,cmp);//排序
for(int i=0;i<n;i++)
{ //输出,注意行末无空格,老套路了
if(i!=0)cout<<" ";
cout<<a[i].x;
}
cout<<endl;
}
return 0;
}
Problem D: 旋转的方阵
Description
有编号1到n2个舞蹈队员,要按顺时针旋转排列站列成一个n阶矩阵(n≤100)。请你编写一个程序帮助排舞的指导来安排整个队形。
Input
多行输入,每行输入n。
Output
对于每个n,给出排列完毕后的旋转矩阵。每个队员之间空一个位置。每个矩阵后空一行。
Sample Input
1
2
4
5
Sample Output
1
1 2
4 3
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 13 22 21 8
13 12 11 10 9
这是一道打印造型的题,考场上写了半天没写出来,回来以后搜了一下,这种矩阵叫螺旋矩阵,比如说要填一个5*5的螺旋矩阵,我们现实怎么填,程序里就怎么填,先填最外一圈,再填里面一圈,以此类推,一共填3圈。那么n*n的矩阵就是n/2+1圈,具体见代码;
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int **a=new int*[n];//动态分配二维数组
for(int i=0;i<n;i++)
a[i]=new int [n];
int i=0;int j=0;
int k=1;//k表示填入矩阵的数,一开始为1
for(int i=0;i<n/2+1;i++)//循环n/2+1次,即填n/2+1圈数字
{
//填上面一行
for(int j=i;j<n-i;j++)
a[i][j]=k++;
//填右边一列
for(int j=i+1;j<n-i;j++)
a[j][n-i-1]=k++;
//填下面一行
for(int j=n-i-2;j>=i;j--)
a[n-i-1][j]=k++;
//填左边一列
for(int j=n-i-2;j>i;j--)
a[j][i]=k++;
//到此,一圈数字已被填完,然后继续下次循环,填内圈的数字
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(j!=0)cout<<" ";//行末无空格
cout<<a[i][j];
}
cout<<endl;
}
cout<<endl;//别忘了每个矩阵之间空一行
}
return 0;
}
Problem E: 报数游戏
Description
一群好朋友(n个人,10≤n≤2000)在一起玩一个报数的游戏。游戏的规则是这样的:大家领到1到n的号牌后就顺序围成一个圈,然后从1号开始以1报数,报到给定的数m后(m≥3),这个报数人就离开游戏;然后下一个人又从1开始报数,报到m,报数人出列。现在请你给出一个模拟该报数游戏的程序,求n个人,以m报数,那么T轮报数后(T≤n),依次从游戏中离开的都是谁?
Input
多组输入,每组输入人数n,报数值m,报数T次
Output
对于每次报数游戏,输出依次从游戏中离开的人员的编号。输出的人员编号之间空一格。每组数据后换行。
Sample Input
10 3 10
6 7 5
3 2 3
Sample Output
3 6 9 2 7 1 8 5 10 4
1 3 6 2 4
2 1 3
这是一道模拟的题目,这种题理清思路就不难了,所以考试的时候心态一定要稳,把题目看清再做。
再说一下我的思路,输入一共有三个参数n,m,T,用一个长为n的数组表示每个人的游戏状态,1表示在游戏中,0表示被踢出去了,不再参加游戏。然后还有一点是题目中问的是T轮报数后,离开的都有谁,这句话我一开始理解错了,以为是n个人从头到尾报了T圈,但其实题目意思是m这个数字报了T圈,即1,2…m这几个数字被报了T轮。然后把被踢出去的人存放到一个数组里输出即可;
#include<iostream>
using namespace std;
int main()
{
int n,m,t;
while(cin>>n>>m>>t)
{
int *a=new int [n+1];
for(int i=0;i<n+1;i++)
a[i]=1; //初始值为1,表示每个人都在游戏中
int cur=1;//记录当前报到的数字
int num=1;//记录当前轮到哪一个人报数
int allnum=1;//累计报过几轮
int *res=new int [n*n];
int r=0;
for(;allnum<=t;)//
{
if(a[num]==0)
{//已出局
num++;//继续下一个人
if(num>n)num=1; //如果超出最后一个人了,就回到第一个
continue;//不再处理,继续下次循环
}
if(cur==m)//报到m这个数,那么就把他踢出去
{
a[num]=0;//出局
res[r++]=num;//把这个人计入结果数组里
num++;//继续到下一个人
if(num>n)num=1;
allnum++;//报到m,所以轮数加1
cur=1;//报的数字变为1
}
else
{//没有报到m
num++;//继续下一个人
if(num>n)num=1;
cur++;//报的数字加1
}
}
for(int i=0;i<r;i++)
{
if(i!=0)cout<<" ";//注意行末无空格
cout<<res[i];
}
cout<<endl;
}
return 0;
}
最后
以上就是潇洒大门为你收集整理的2019-12浙江工业大学计算机学院转专业一志愿机试题目的全部内容,希望文章能够帮你解决2019-12浙江工业大学计算机学院转专业一志愿机试题目所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复