首页 > 其他分享 >浙工商复试上机题

浙工商复试上机题

时间:2023-03-14 22:34:00浏览次数:29  
标签:case 输出 题目 上机 int 工商 复试 printf 输入

21年复试上机题目

1.一志愿机试题

(一) 不在数列中的数字

题目描述:
给出一个长度为 n 的数列,包含 1 到 n 的数字,输出 1 到 n 中不在数列中的数字。
题目输入:
第一行一个数字 n,表示数组长度。(1≤n≤1e5)
第二行 n 个用空格隔开的数字,分别表示数组中 n 个数字。(1≤ai≤n)

输入案例:
8
4 3 2 7 8 2 3 1
输出案例:
2
5
6

解决方法:

#include<stdio.h> 
int main(){
    int n,i,num=0;
    scanf("%d",&n);
    int a[n];
    int b[n+1];//因为是1到n;
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        b[i]=i;
    }
    for(i=0;i<n;i++){
        b[a[i]]=0;
    }
    //就这个num要输出,不然也没好的办法,只能再来一次循环
    for(i=1;i<=n;i++){
        if(b[i]!=0){
            num++;
        }
    }
    printf("%d\n",num);  
    for(i=0;i<n;i++){
        if(b[i]!=0){
            printf("%d\n",b[i]);
        }
    }
}

(二) 输出 Ascii 码

题目描述:
输出"I want to take the MS's rocket to live in the MS's ice castle."的 ascii 码。
题目输入:
无输入
题目输出:
输出一行,以空格分隔每个 ascii 码。
Sample 仅供参考格式,并非正确答案。
解决方法:

#include<stdio.h> 
int main(){
    char a;
    while((a=getchar())!=EOF){
        printf("%d ",a);
    }
}

(三) 荧光屏编程

题目描述:
荧光屏编程(具体看样例即可,玩过计算器的都懂)
题目输入:
输入四个整数 a,b,c,d(0<=a,b,c,d<=9)
题目输出:
输出一个 5×23 的字符串矩阵,‘-’表示不亮,‘*’表示亮,每两个数字显示之间有一列空格(末
尾没有)

输入案例:
1 2 3 4
输出示例:

image
解决方法:

#include<stdio.h> 
void print1(int a);
void print2(int a);
void print3(int a);
void print4(int a);
void print5(int a);
int main(){
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    print1(a);
    printf("  ");
    print1(b);
    printf("  ");
    print1(c);
    printf("  ");
    print1(d);
    printf("\n");
    print2(a);
    printf("  ");
    print2(b);
    printf("  ");
    print2(c);
    printf("  ");
    print2(d);
    printf("\n");
    print3(a);
    printf("  ");
    print3(b);
    printf("  ");
    print3(c);
    printf("  ");
    print3(d);
    printf("\n");
    print4(a);
    printf("  ");
    print4(b);
    printf("  ");
    print4(c);
    printf("  ");
    print4(d);
    printf("\n");
    print5(a);
    printf("  ");
    print5(b);
    printf("  ");
    print5(c);
    printf("  ");
    print5(d);
    printf("\n");
    return 0;
}
//擦,只能一行一行输出
void print1(int a){
    switch (a) {
        case 1:
            printf("----*");
            break;
        case 2:
        case 3:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
            printf("*****");
            break;
        case 4:
            printf("*---*");
            break;
    }
}
void print2(int a){
    switch (a) {
        case 1:
        case 2:
        case 3:
        case 7:
            printf("----*");
            break;
        case 4:
        case 8:
        case 9:
            printf("*---*");
            break;
        case 6:
        case 5:
            printf("*----");
            break;
    }
}
void print3(int a){
    switch (a) {
        case 1:
        case 7:
            printf("----*");
            break;
        case 2:
        case 3:
        case 5:
        case 6:
        case 8:
        case 9:
        case 4:
            printf("*****");
            break;
    }
}
void print4(int a){
    switch (a) {
        case 1:
        case 3:
        case 5:
        case 4:
        case 7:    
        case 9:
            printf("----*");
            break;
        case 2:
            printf("*----");
            break;
        case 6:
        case 8:
            printf("*---*");
            break;
    }
}
void print5(int a){
    switch (a) {
        case 1:
        case 9:
        case 4:
        case 7:
            printf("----*");
            break;
        case 2:
        case 3:
        case 5:
        case 6:
        case 8:
            printf("*****");
            break;
    }
}

(四) 非常简单的数学题

题目描述:
image

题目输入:
第一行一个正整数 T,表示有 T 组询问(T<100)。
后面 T 行,每行一个正整数 n(1<=n<=10^12)。
题目输出:
输出 T 行,表示 T 组询问的答案

输入案例:
3
5
8
1000000000000
输出案例:
8
17
488099925

解决方法:

数字太大了,不会

#include<stdio.h>   
#include<stdlib.h>   
#include<math.h>   
__int64 fn1(int n);
double ceil(double x);
int main(){
    __int64 t,n,x;
    scanf("%ld",&t);
    while(t>0){
        scanf("%ld",&n);
        x=fn1(n)%1000000007;
        printf("%I64d\n",x);
        t--;
    }
    return 0;
}
__int64 fn1(int n){
    __int64 sum=0;
    for(int k=1;k<=n;k++){
        sum=sum+ceil(log2(k));
    }
    return sum;
}

(五) AB 博弈

题目描述:
给出一个正整数 N,A 和 B 轮流可以对这个数进行操作,包括减 1 操作和减 2 操作,A 先操
作,当这个数变为 0 后两者就停止操作,不能将这个数减成负数。
A 和 B 都希望成为把这个数减成 0 的人,假设两者都用各自的最佳策略,问最后谁把这个数
减成了 0。
题目输入:
多组数据,每一行输入一个数字 n,题意中的正整数等于 n+1。
题目输出:
对于每一个输入输出一行答案
如果 A 最终将这个数减为了 0,输出:“Brother Chao will get the gold nugget!”
如果 B 最终将这个数减为了 0,输出:“PangPang will get the gold nugget!”
没有双引号

输入案例:
3
5
输出案例:
Brother Chao will get the gold nugget!
PangPang will get the gold nugget!

解决方法:

#include<stdio.h>   

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        n=n+1;
        if(n%3==0)
            printf("PangPang will get the gold nugget!\n");
        else
            printf("Brother Chao will get the gold nugget!\n");
    }  
    return 0;
}

(六) 简单找区间

题目描述:
给你 n 个数,然后找一个区间[l,r],使这个区间的平均值最大,直接输出这个最大的平均值
就行了
题目输入:
输入数据有多组,直到文件结束符,每组只有一两行。
第一行一个 n,表示下面有 n 个数。(1<=n<=10000)
第二行 n 个数,a1,a2......an。表示 n 个数字,-1000000≤ai≤1000000

题目输出:
输出某区间的最大平均值,区间不用输出,直接输出最大值即可。(如果含小数,则取整数部分)

输入案例:
1
1
3
3 3 3
5
1 2 3 4 5
输出案例:
1
3
5

解决方法:

找数中的最大值输出

#include<stdio.h>
int main(){
  int n,i,j,max,temp;
  while((scanf("%d",&n))&&n!=EOF){//文件结束符
    int a[n];
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for (i=0; i<n-1;i++) {
        max=i;                            //p用于记录最小元素的下标
        for (j=i+1;j<n;j++) {       //找到剩下元素中最小的那一个
            if (a[max]<a[j])
                max=j;
        }
        temp = a[i];                        //temp是交换两数时的中间变量
        a[i] = a[max];
        a[max] = temp;
    }
    printf("%d\n",a[0]);
  }
  return 0;
}

(七) 数字博弈

题目描述:
A 和 B 各手持一个数字 a、b。两者轮流操作,A 先开始,每次挑选如下的操作进行一次:

  1. 翻转,如 s=123,翻转后为 321
  2. 整除 10,如 s=123,整除 10 后变为 12

每个人只能操作自己的数字,如果出现 A 和 B 的数字相等则 A 赢,否则游戏不会停止。双方尽可能采取最优策略。问 A 能够赢下比赛或是无法停止游戏。
题目输入:
第一行输入一个 T(1<=T<=10),表示 T 个测试样例。
对于每个测试样例,有两个数字 a 和 b,1<=a,b<=10^500000,并且 a 和 b 都不为 0。
题目输出:
对于每个测试样例,如果 A 可以赢得游戏,输出“lyh nb”;否则输出“xyh nb”。

输入案例:
4
11111 1
1 11111
12345 54321
123 123
输出案例:
lyh nb
xyh nb
lyh nb
lyh nb

解决方法:

(不确定,大致写了一点,但是有些还是想不通)

#include<stdio.h>
int reserve(int n);
int chu10(int n);
int lens(int n);
int main(){
    int t,i;
    int a,b,lena,lenb;
    char *s;
    scanf("%d",&t);
    for(i=0;i<t;i++){
        scanf("%d%d",&a,&b);
        lena=lens(a);
        lenb=lens(b);
        //只能a想方设法去跟b相同
        //坏坏,第二种情况,只要b的长度比a长,b就会想方设法不跟a相等
        if(lena>=lenb){
            if(a==b||reserve(a)==b||reserve(a)==reserve(b)||a==reserve(b))
                printf("%s\n","lyh nb");
            else{
                if(chu10(a)==chu10(b)&&lena>lenb)
                //坏坏,第二种情况,只要b的长度比a长,b就会想方设法不跟a相等
                    printf("%s\n","lyh nb");
                else
                    printf("%s\n","xyh nb");;
            }
        }else{
            printf("%s\n","xyh nb");;
        }
    }
  return 0;
}
int reserve(int n){//翻转
    int result=0;
    while(n>0){
        result=result*10+n%10;
        n=n/10;
    }
    return result;
}
int chu10(int n){
    while(n>10)
        n=n/10;
    return n;
}
int lens(int n){
    int len=0;
    while(n>0){
        len++;
        n=n/10;
    }
    return len;
}

2.调剂上机题

(一) 简单字符串

题目描述:
如果一个字符串中有连续两个字符重复,那么视为出现了复读。请判断给出的字符串是否出现了复读。
题目输入:
第一行为一个整数 t(1≤t≤10)代表数据组数
接下来有 t 行,每行一个字符串,只包含小写字母(字符串长度小于等于 1000)
题目输出:
对于每一个字符串,输出一行。如果有连续两个字符重复,那么视为出现了复读,输出“Yes”,否则输出“No”。

输入案例:
2
aab
aba
输出案例:
Yes
No

解决方法:

#include<stdio.h>   
#include <string.h>
int main(){
    int t,lena,i,flag;
    scanf("%d",&t);
    char a[1000];
    while(t>0){
        flag=0;
        scanf("%s",a);
        lena=strlen(a);
        for(i=1;i<=lena;i++){
            if(a[i-1]==a[i]){
                printf("Yes\n");
                flag=1;
                break;
            }
        }
        if(flag==0)
            printf("No\n");
        t--;
    }
 return 0;   
}

(二) 括号和括号

题目描述:
有一串字符串只包含'('和')',判断其是否为合法的括号匹配,每个'('均能在其右边找到与之唯一匹配的')'即合法。
题目输入:
第一行为一个整数 T(T<=100),表示 T 个测试数据。
接下来 T 行每行一个字符串 s(只包含'('和')',|s|<1e5)
题目输出:
如果是合法匹配输出 Yes,否则输出 No。每个输出都为一行。

输入案例:
2
(()(())()(()()))
())())((()(())
输出案例:
Yes
No

解决方法:
方法1:减1加1

#include<stdio.h>   
#include <string.h>
int main(){
    int t,num=0,i,lena;
    char a[10000];
    scanf("%d",&t);
    while(t>0){
        scanf("%s",a);
        lena=strlen(a);
        for(i=0;i<lena;i++){
            if(a[i]=='(')
                num++;
            else if(a[i]==')'){
                num--;
                if(num<0){
                    printf("No");
                    break;
                }
            }               
        }
        if(num==0)
            printf("Yes");
        t--;
    }
return 0;   
}

方法2:用栈来实现

#include<stdio.h>
#include <string.h>
int main(){
  char s[100],temp;
  char zhan[100];
  int top=-1;
  int t,i,j;
  scanf("%d",&t);
  int len;
  for(i=0;i<t;i++){
    scanf("%s",s);
    top=-1;
    len=strlen(s);
    j=0;
    while(j<len){
      temp =s[j];
      if(top==-1){//栈为空时
        top++;
        zhan[top] = temp;
      }else{
      //( 入栈
        if(temp=='('){
          top++;
          zhan[top] = temp;
        }else {
          if(temp==')'){
            if(zhan[top]=='(')
              top--;
            else 
              break;
          }
        }
      }
      j++;
    }
    if(top==-1)
      printf("%s","Yes");
    else
      printf("%s","No");
  }
  return 0;
}

(三) 被吃掉的数字

题目描述:
假设有一个基数 a 和一个长度为 n 的序列,该序列为 a+1,a+2,a+3,…,a+n-1,a+n。现将该序列打乱后,拿掉一个数,问拿掉的那个数在原序列的序号是多少
题目输入:
第一行输入一个正整数 n,表示原始的序列的长度。
第二行输入另一个正整数,表示基数 a。
第三行输入 n-1 个正整数 ai,表示被打乱顺序后的序列。
保证输入合法(2≤n≤2000,1e9<=a<=2e9,a+1≤ai≤a+n)
题目输出:
输出一个正整数,表示被拿走的数的序号。

输入案例:
5
1000000100
1000000102 1000000105 1000000101 1000000103
输出案例:
4

解决方法:

#include<stdio.h>   
#include <string.h>
int main(){
    int n,a,i,b;
    scanf("%d%d",&n,&a);
    int arr[n+1];
    for(i=0;i<=n;i++){
        arr[i]=i;
    }
    //输入n-1个值
    for(i=0;i<n-1;i++){
        scanf("%d",&b);
        arr[b-a]=0;
    }
    for(i=0;i<=n;i++){
        if(arr[i]!=0){
            printf("%d\n",i);
            break;
        }
    }
return 0;   
}

(四) 最低成本的目标

题目描述:
现在有一个数初始为 0,花费 1 点成本使得这个数+1,花费 50 点成本使这个数+100,你可以进行若干次上述的两种操作,在最后可以花费 500 点成本使该数翻倍。问至少需要多少成本使得这个数字达到目标数 N 或 N 以上。
题目输入:
目标数 N(N >= 30000)
题目输出:
最小成本数

输入案例:
101
输出案例:
51

解决方法:(不确定)

#include<stdio.h>   
int main(){
    int n,sum=0;
    scanf("%d",&n);
    sum=(n/100)*50+n%100;
    printf("%d",sum);
return 0;   
}

(五) 正反画画

题目描述:
如果在一个二维平面 xOy 中,有三个不同的点 A(x1,y1),B(x2,y2),C(x3,y3),根据这三个点的顺序进行画圆,想象一下,从 A 点开始画圆,穿过 B 点,再穿过 C 点,最后回到 A 点完成画圆,问判断出这样是按顺时针画圆还是按逆时针画圆。
题目输入:
第一行包含一个整数 T(1≤ T ≤ 1000),表示测试用例的数量。
在接下来的 T 行中,每一行包含 6 个用空格分隔的整数 x1、y1、x2、y2、x3、y3(-1000
≤ x1、y1、x2、y2、x3、y3 ≤ 1000)。
保证 A、B、C 三个点各不相同。
题目输出:
对于每个测试用例,若结果为顺时针,则输出“Clockwise”,若结果为逆时针,则输出“Counterclockwise”(不用输出引号)

输入案例:
3
1 2 2 1 -1 -2
4 3 -4 3 3 4
4 -3 4 3 3 4
输出案例:
Clockwise
Clockwise
Counterclockwise

解决方法:

/*设 p1=(x1,y1), p2=(x2,y2), p3=(x3,y3)
求向量
p12=(x2-x1,y2-y1)
p23=(x3-x2,y3-y2)
则当 p12 与 p23 的叉乘(向量积)*/
#include<stdio.h>   
int main(){
    int n;
    scanf("%d",&n);
    while(n>0){
        //结果大于0为逆时针,小于0为顺时针,结果等于0在同一条直线
        int x1,y1,x2,y2,x3,y3,result=0;
        scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
        result= (x2-x1)*(y3-y2)-(y2-y1)*(x3-x2) ;
        if(result>0)
            printf("Counterclockwise\n");
        else if(result<0)
            printf("Clockwise\n");
        n--;
    }
    
return 0;   
}

(六) 有趣的进制数

题目描述:
2992 这个数的十进制数四位数字之和为 2+9+9+2=22,它的十六进制数为 BB0,其四位数字之和也为 22,同时它的十二进制数表示 1894,其四位数字之和也为 22。请判断任意一个十进制的四位数,是不是满足上述规则。
题目输入:
输入含有一些四位正整数,如果为 0,则输入结束。
题目输出:
若 n 为满足上述规则,则输出“#n is a GOD number.”,否则输出“#n is not a GOD number.”。
每个结果占一行。注意:#n 表示所读入的 n 值。

输入案例:
2992
1234
0
输出案例:
2992 is a GOD number.
1234 is not a GOD number.

解决方法:

#include<stdio.h>
#include <string.h>
int fuc1(int n);
int fucto16(int n);
int fucto12(int n);
int main(){
  int n;
  while(scanf("%d",&n)&&n!=0){
    int n1,n2,n3;
    //输入十进制,四位数之和的值
    n1=fuc1(n);
    //转换为十六进制,四位数之和的值
    n2=fucto16(n);
    //转换为十二进制,四位数之和的值
    n3=fucto16(n);
    if(n1==n2&&n2==n3&&n1==n3){
      printf("%d is a GOD number.\n",n);
    }else {
      printf("%d is not a GOD number.\n",n);
    }
  }
  return 0;
}
int fuc1(int n){
  int sum=0;
  while(n>0){
    sum=sum+n%10;
    n=n/10;
  }
  return sum;
}
int fucto16(int n){
  int sum=0;
  while(n>0){
    sum=sum+n%16;
    n=n/16;
  }
  return sum;
}
int fucto12(int n){
  int sum=0;
  while(n>0){
    sum=sum+n%12;
    n=n/12;
  }
  return sum;
}

(七) 一起来 abc
题目描述:
已知 a 和 b 的范围是 0 到 1000000,c 的范围是 0 到 1000000,请问有多少种满足条件的三元组(x, y, z) 满足 x + y = z。其中 x ∈ [0, a] 且 y ∈ [0, b] 且 z ∈ [0, c]
题目输入:
输入三个整数 a,b,c
0 ≤ a ≤1000000
0 ≤ b ≤1000000
0 ≤ c ≤1000000
题目输出:
输出满足条件的三元组个数

输入案例:
2 2 2
输出案例:
6

解决方法:

写出来也是超时的,不会做

#include<stdio.h>
int fun1(int sum,int c);
int main(){
  int a,b,c;
  int sum=0,i,j,n=0;
  scanf("%d%d%d",&a,&b,&c);
  //x+y=z,z的范围为[0,z],可以把x+y的值送入判断比z小,就++;
  for(i=0;i<=a;i++){//x的值
    for(j=0;j<=b;j++){
      sum=i+j;
      if(fun1(sum,c)==1){
        n++;
      }
    }
  }
  printf("%d",n);
  return 0;
}
int fun1(int sum,int c){
  int flag=0;
  if(sum>=0&&sum<=c)
    flag=1;
  return flag;
}


标签:case,输出,题目,上机,int,工商,复试,printf,输入
From: https://www.cnblogs.com/ZarkY/p/17182083.html

相关文章

  • 复试综合面试问题回答
    这个基本都是实事求是的回答,但我怕有时候自己逻辑不清,回答的也可磕磕绊绊,所以来理一下思路,有时候想到什么就写一点什么吧。(也是督促我快点完善,每天学一点)1.研究生规划:......
  • 给学弟学妹的计算机考研复试经验贴
    复试对于整个研究生考试是相当重要的,可能你排名靠后复试成功逆袭上岸,也许你初试第一复试折戟。这些都是有可能的,这样的案例太多太多。那些初试400,两篇Nature不打老师就能......
  • 安大复试上机题
    点击查看代码#include<stdio.h>#include<string.h>intmain(){inti=1;doublen=1;doublesum=1;while(n>0.00001){n=(1.0)/(2*i+1);......
  • 《复试项目》报错汇总【持续更新】
    我推荐大家的学习路线是,先把我的视频花1~2天的时间刷完,然后再考虑做不做项目,如果时间紧张,把我的代码看懂,然后多准备准备机器学习相关的知识。如果有时间的话,那就二刷我的视......
  • 深圳大学计算机考研复试
    复试前注意事项本次复试采用网络远程复试,复试所需软件“企业微信”+“腾讯会议”1、硬件设备:每个网络远程复试考生须准备:智能手机1台,带摄像头电脑。其中智能手机用于主机......
  • 企业工商信息数据API接口
    #新人福利#近年来,AI、大数据、智能数字化等新经济领域也开始出现大批初创企业,这些新入局者需要有效对接市场,就此就需要优质的企业工商信息来布局,借力一些大数据工具无疑是......
  • 考研复试口语
    1、自我介绍Goodmorning,respectedprofessors!IhavebeenexpectingthisinterviewsinceIgottheinterviewnotice.MynameisGaowei.IcomefromShanxiPr......
  • 工商银行长春分行金融助力“保交楼” 践行责任“稳民生”
    近日,工商银行长春分行为名单企业成功发放“保交楼”配套融资贷款,成为吉林省首家为“保交楼”项目提供配套融资的国有商业银行。在名单企业“保交楼”项目提出配套融资需求后......
  • 菲中工商贸投资合作签约活动在京举办
    2023年1月3日至5日,中菲两国元首亲切会谈后,共同发布了成果丰硕的二十八条内容的联合声明。1月3日至9日,由菲律宾菲中人民友好促进会与中国联合国采购促进会在京联合举办了......
  • 喜报!中国工商银行长春分行荣获吉林省“巾帼建功”先进集体称号
    近日,为表彰先进、树立榜样,进一步引领和激励全省广大妇女以更加饱满的热情、更加昂扬的斗志,为新时代吉林全面振兴贡献巾帼力量,吉林省委、省政府决定对全省“巾帼建功”先进集......