杭州电子科技大学&华东师范大学 上机题目
第一题:关羽闯关
要求:关羽过关斩3将,关羽的武力值为x,敌人的武力值为y,如果满足(x-y)^2+x-y+41如果为素数则关羽获胜,如果3次全部获胜则输出WIN,失败者输出失败的关号。
输入格式:
关羽武力值x
将领1y
将领2y
将领3y
输出格式:
WIN或者失败关号
思路:
写一个素数鉴别的函数和一个武力值比较函数,注意头文件math.h(有开根函数)
#include <stdio.h>
#include <math.h>
int wulizhi(int x,int y){
int num=x-y;
return num*num+num+41;
}
bool isprime(int num){//快速判断是不是质数
if(num<=3){
return num>1;
}//不在6的倍数两侧的一定不是质数
if(num%6!=1&&num&&6!=5){
return false;
}
for(int i=5;i<=sqrt(num);i+=6){
if(num%i=0||(num)%(i+2)==0){
return false;
}
}
return true;
}
int main(){
int guan,em[4],lose=0;
scanf("%d",&guan);
for(int i=1;i<=3;i++){
scanf("%d \n",em[i];)
}
for(int i=1;i<=3;i++){
if(isprime(wulizhi(em[i]))){
continue;
}
else
{
lose=i;
printf("lost to the Np.%d enemy",lose);
}
}
if(lose==0) printf("WIN");//lose没变 等于没输,赢麻
return 0;
}
复制代码
第二题:资本家模拟器
要求:输入N个员工,每个员工ID号,上班时间,下班时间,第一行输出最早去公司的员工的ID,第二行输出最晚走的员工的id,最后一行输出工作最久员工的ID。
输入格式:
第一行输入N表示有个N个员工,在接下来的N行,依次输入员工的ID,上班时间,下班时间。
输出格式:
输出上述要求的3个员工
思路:
创建一个结构体,包含员工的信息。然后写3个不同的cmp,然后利用3个sort函数进行排序。
#include <stdio.h>
struct person{
char id;
int ts=0,te=0;
int worktime;
}people[1001];
bool cmps(person a,person b){//最早上班
return a.ts<b.ts;
}
bool cmpe(person a,person b){//最晚下班
return a.te>b.te;
}
bool cmpl(person a,person b){//上班时间最久
return a.worktime>b.worktime;
}
int main(){
int N;
scanf("%d",&N);
for(int i=0;i<N;i++){
int tsh,tsm,tss,teh,tem,tes;
scanf("%c",&people[i+1].ID);
scanf("%d:%d:%d %d:%d:%d",&tsh,&tsm,&tss,&teh,&tem,&tes);
people[i+1].ts=tsh*3600+tsm*60+tss;
people[i+1].te=tsh*3600+tsm*60+tss;
people[i+1].worktime=people[i+1].te-people[i+1].ts;
}
sort(people[1].tsh,people[N].tsh,cmps);
printf("%c\n",people[1].id);
sort(people[1].teh,people[N].teh,cmpe);
printf("%c\n",people[1].id);
sort(people[1].worktime,people[N].worktime,cmpl);
printf("%c\n",people[N].id);
return 0;
}
复制代码
第三题:算数器
要求:小学生都会算的1位数与1位数运算的代数式。
输入格式:
合法表达式
输出格式:
运算后的值
思路:
switch函数鉴别不同的运算符
#include <stdio.h>
#include <math.h>
int main(){
int num1,num2;
char ch;
while(scanf("%d %c %d",&num1,&ch,&num2)!=EOF){
switch(ch){
case'+':
printf("%d",num1+num2);
break;
case'-':
printf("%d",num1-num2);
break
case'*':
printf("%d",num1*num2);
break
case'/':
printf("%d",num1/num2);
break
}
}
return 0;
}
复制代码
第四题:小组规模
要求:一个小组的成员只知道自己的组长是谁,二在同一个组领导下的成员不互相认识。现在这个团队希望有一个程序能统计一下个组长带领小组的规模,对每一个小组成员先真的自己及自己带领下的小组有多少人。
输入格式:
两行 第一行为N,代表小组的人数
第二行有N个数,每个数据表示第几个人的组长是几。团队的领导用0来表示,说明没有人做他的组长,数据保证么有环路。单独的一个成员视为1个人的小组。
输出格式:
1行 N个数字u,表示第i个成员的规模
思路:
首先寻找父节点,然后依次打印
#include <stdio.h>
#include <math.h>
int main(){
int N;
scanf("%d",&N);
int count[300],a[300];
for(int i=1;i<=N;i++){
scanf("%d ",&a[i]);
}
for(int i=1;i<N;i++){
if(a[i]==0){
continue;
}
else{
int k=i;//核心代码
while(a[k]!=0){//向上遍历,寻找父节点
int j=a[k];
count[j]++;
k=j;
}
}
}
for(int i=1;i<N;i++){
printf("%d",count[i]);
}
printf("%d",count[N]);
return 0;
}
复制代码
参考书目
1.计算机软件相关专业复试指导 ————皮皮灰
2.2022年数据结构考研复试指导 ————王道论坛
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END