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>usingnamespacestd;charfindfan(charc){if(c>='a'&&c<='z'){intaux=c-'a';return'z'-aux;}elseif(c>='A'&&c<='Z'){intaux=c-'A';returnc='Z'-aux;}elsereturnc;}intmain(){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(autoi:s){cout<<i<<endl;}return0;}平方因子-吉林大学
题目描述
给定一个数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>usingnamespacestd;intmain(){intm;cin>>m;if(m>1&&m<10000){for(intk=2;k*k<=m;k++){intd=k*k;if(m%d==0){cout<<"Yes";return0;}}}cout<<"No";return0;}三角形的边-吉林大学
题目描述
给定三个已知长度的边,确定是否能够构成一个三角形,这是一个简单的几何问题。我们都知道,这要求两边之和大于第三边。实际上,并不需要检验所有三种可能,只需要计算最短的两个边长之和是否大于最大那个就可以了。
这次的问题就是:给出三个正整数,计算最小的数加上次小的数与最大的数之差。
输入格式
每一行包括三个数据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 \minmin为最小值,mid \text{mid}mid为中间值,max \maxmax为最大值。
输入样例
1 2 3输出样例
0#include<iostream>#include<set>usingnamespacestd;intmain(){multiset<int>edge;for(inti=0;i<3;i++){inta;cin>>a;edge.insert(a);}intsum=0;for(autoi=edge.begin();i!=edge.end();i++){if(next(i)==edge.end()){sum=sum-*i;}else{sum+=*i;}}cout<<sum;return0;}排列与二进制-吉林大学
题目描述
在组合数学中,我们学过排列数。
从n {n}n个不同元素中取出m {m}m(m ≤ n {m \leq n}m≤n)个元素的所有排列的个数,叫做从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(n−1)(n−2)…(n−m+1)=(n−m)!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<m≤n≤10000,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>intmain(void){intn,m,a=1,b=1,c,i,j,k;intcount=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);}return0;}