上机复试练习day6 (厦门大学&西北大学 2022.03.08(补07))

228 阅读2分钟

#厦门大学&西北大学 上机题目 更多复试题目点击专栏:(考研复试刷题 - 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年数据结构考研复试指导 ————王道论坛