#厦门大学&西北大学 上机题目 更多复试题目点击专栏:(考研复试刷题 - horx626的专栏 - 掘金 (juejin.cn))
第一题:
数字黑洞
要求:
给一个4位数(每个数字不相同),如果吧4位数按照递增和递减方式合成两个数,再用第一个数字减去第二个数字,得到一个新的数字,一直重复这样做,和很快我们就的大偶一个数字“6174”,这个数字也叫kaprekar
输入格式:
输入一个满足上述要求的4位数
输出格式:
证明数字黑洞
思路:
将数字分解为数组,再用数组排序组合成对应的数字,再循环到6174或者0就证明完毕
int a[10];
void toarry(int n){
int i;
for(i=3;i>=0;i++){
a[i]=n%10;
n=n/10;
}
}
int tonumber(int a[]){//让数组变成4位数
int i;
int sum=0;
for(i=0;i=4;i++){
sum*10+a[i];
}
return sum;
}
int cmp1(int a,int b){//cmp函数是c++里面,不嫌麻烦也可以手写快排或者冒泡排序
return a<b;
}
int cmp2(int a,int b){
return a>b;
}
int main(){
int n;
scanf("%d",&n);
while(1){
toarry(n);
sort(a[0],a[3],cmp2);
int max=tonumber(a);
sort(a[0],a[3],cmp1);
int min=tonumber(a);
n=max-min;
printf("%04d-%04d=%04d",max,min,n);
if(n==0||n=6174){
break;
}
return 0;
}
}
第二题:埃及分数
要求:
分子为1的分数为埃及分数。现在输入一个真分数(分子比分母小),将该分数分解为埃及分数。
输入格式:
一个真分数
输出格式:
将真分数分解埃及分数之和
思路:
1: b除以a,等到商q和余数r 2: a/b=1/(q+1)+(a-r)/(b*(q+1)) 3:重复步骤2,直到分解完毕
int main(){
int a,b;
scanf("%d/%d",&a,&b);
printf("%d/%d",a,b);
int r,q;
r=a%b;
while((a-r)!=1){
r=a%b;
q=a/b;
printf("%d/%d,q+1");
if((a-r)!=1){
printf("+");
}
a=a-r;
b=b*(q+1);
}
return 0;
}
第三题:素数处理
同前博客
参考书目
1.计算机软件相关专业复试指导 ————皮皮灰
2.2022年数据结构考研复试指导 ————王道论坛