2025年吉林大学计算机考研复试机试真题

2025年吉林大学计算机考研复试上机真题

历年吉林大学计算机考研复试上机真题

历年吉林大学计算机考研复试机试真题

更多学校完整题目开源地址:https://gitcode.com/u014339447/pgcode

百度一下pgcode 即可查看,输入 “学校名称” 即可筛选该校历年机试真题,包括真题、ac代码、解题思路、视频讲解。

字符串的反码-吉林大学

题目描述

一个二进制数,将其每一位取反,称之为这个数的反码。

下面我们定义一个字符的反码。如果这是一个小写字符,则它和字符 ‘a’ 的距离与它的反码和字符 ‘z’ 的距离相同;如果是一个大写字符,则它和字符 ‘A’ 的距离与它的反码和字符 ‘Z’ 的距离相同;如果不是上面两种情况,它的反码就是它自身。

举几个例子,‘a’ 的反码是 ‘z’;‘c’ 的反码是 ‘x’;‘W’ 的反码是 ‘D’;‘1’ 的反码还是 ‘1’;‘ ′ 的反码还 是 ′ ' 的反码还是 ' 的反码还’。

一个字符串的反码定义为其所有字符的反码。我们的任务就是计算出给定字符串的反码。

输入格式

输入每行都是一个字符串,字符串长度不超过 80 个字符。如果输入只有 ‘!’,表示输入结束,不需要处理。

输出格式

对于输入的每个字符串,输出其反码,每个数据占一行。

输入样例
Hello 
JLU-CCST-2011 
!
输出样例
Svool 
QOF-XXHG-2011
#include <iostream>
#include <vector>
using namespace std;
char findfan(char c){
    if(c>='a' && c<='z'){
        int aux=c-'a';
        return 'z'-aux;
    }
    else if(c>='A' && c<='Z'){
        int aux=c-'A';
        return c='Z'-aux;
    }
    else return c;
}
int main() {
    vector<string> s;
    while(1){
        string a;
        cin>>a;
        if(a=="!") break;
        s.push_back(a);
    }
    for(auto &i:s){
        for(auto &j:i){
            j=findfan(j);
        }
    }
    for(auto i:s){
        cout<<i<<endl;
    }
    return 0;
}

平方因子-吉林大学

题目描述

给定一个数 n {n} n,判定它是否有一个不为 1 的完全平方数因子。

也就是说,是否存在某个 k {k} k k > 1 {k > 1} k>1,使得 k 2 {k^2} k2 能够整除 n {n} n

输入格式

每行一个整数 n {n} n 1 < n < 10000 {1 < n < 10000} 1<n<10000

输出格式

对于每一个输入的整数,在单独的一行输出结果,如果有不为 1 的完全平方数因子,则输出 “Yes”,否则输出 “No”。请注意大小写。

输入样例
15
输出样例
No
#include <iostream>
using namespace std;
int main(){
    int m;
    cin>>m;
    if(m>1&&m<10000){
        for(int k=2;k*k<=m;k++){
            int d=k*k;
            if(m%d==0) {
                cout<<"Yes";
                return 0;
        }
    }
    }
    
    cout<<"No";
    return 0;
}

三角形的边-吉林大学

题目描述

给定三个已知长度的边,确定是否能够构成一个三角形,这是一个简单的几何问题。我们都知道,这要求两边之和大于第三边。实际上,并不需要检验所有三种可能,只需要计算最短的两个边长之和是否大于最大那个就可以了。

这次的问题就是:给出三个正整数,计算最小的数加上次小的数与最大的数之差。

输入格式

每一行包括三个数据 a {a} a, b {b} b, c {c} c,并且都是正整数,均小于 10000。

输出格式

对于输入的每一行,在单独一行内输出结果 s {s} s s = min ⁡ ( a , b , c ) + mid ( a , b , c ) − max ⁡ ( a , b , c ) {s = \min(a,b,c) + \text{mid}(a,b,c) - \max(a,b,c)} s=min(a,b,c)+mid(a,b,c)max(a,b,c)。上式中, min ⁡ \min min 为最小值, mid \text{mid} mid 为中间值, max ⁡ \max max 为最大值。

输入样例
1 2 3
输出样例
0
#include <iostream>
#include <set>
using namespace std;
int main(){
    multiset<int> edge;
    for(int i=0;i<3;i++){
        int a;
        cin>>a;
        edge.insert(a);
    }
    int sum=0;
    
    for(auto i=edge.begin();i!=edge.end();i++){
        if(next(i)==edge.end()){
            sum =sum-*i;
        }
        else{
            sum +=*i;
        }
    }
    cout<<sum;

    return 0;
}

排列与二进制-吉林大学

题目描述

在组合数学中,我们学过排列数。

n {n} n 个不同元素中取出 m {m} m m ≤ n {m \leq n} mn)个元素的所有排列的个数,叫做从 n {n} n 中取 m {m} m 的排列数,记为 p ( n , m ) {p(n, m)} p(n,m)

具体计算方法为 p ( n , m ) = n ( n − 1 ) ( n − 2 ) … ( n − m + 1 ) = n ! ( n − m ) ! {p(n, m) = n(n-1)(n-2) \ldots (n-m+1) = \frac{n!}{(n-m)!}} p(n,m)=n(n1)(n2)(nm+1)=(nm)!n!(规定 0 ! = 1 {0! = 1} 0!=1)。

n {n} n m {m} m 不是很小时,这个排列数是比较大的数值,比如 p ( 10 , 5 ) = 30240 {p(10,5) = 30240} p(10,5)=30240。如果用二进制表示为 p ( 10 , 5 ) = 30240 = ( 111011000100000 ) 2 {p(10,5) = 30240 = (111011000100000)_2} p(10,5)=30240=(111011000100000)2,也就是说,最后面有 5 个零。

我们的问题就是,给定一个排列数,算出其二进制表示的后面有多少个连续的零。

输入格式

输入包含多组测试数据,每组测试数据一行。

每行两个整数, n {n} n m {m} m 0 < m ≤ n ≤ 10000 {0 < m \leq n \leq 10000} 0<mn10000 n = 0 {n=0} n=0 标志输入结束,该组数据不用处理。

输出格式

对于每个输入,输出排列数 p ( n , m ) {p(n, m)} p(n,m) 的二进制表示后面有多少个连续的零。每个输出放在一行。

输入样例
10 5
6 1
0 0
输出样例
5
1
#include<stdio.h>
int main(void){
    int n,m,a=1,b=1,c,i,j,k;
    int count=0;
    while(scanf("%d %d",&n,&m) && (n!=0 || m!=0)){
        a=1; 
        b=1; 
        count=0;
        c=0;
        if(n>0){
            for(i=1;i<=n;++i){
                a*=i;
            }
            for(j=1;j<=(n-m);++j){
                b*=j;
            }
        }
        c=a/b;
        for(k=1;k<20;++k){
            if(c%(1<<k)==0){
                count++;
            }
            else{
                break;
            }
        }
        printf("%d\n",count);
    }
    return 0;
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐