PTA - C语言暑假题集4

7-62 兔子繁衍问题

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。

输入样例:
30
输出样例:
9

// 1 1 2 3 5 8 13 21 34

#include <stdio.h>
// 1.递归
// int Fib(int x){
//     if(x<=1) return x;
//     return Fib(x-1)+Fib(x-2);
// }
// 2.迭代
int Fib(int x){
    if(x==1) return 1;
    int a=0,b=1,c;
    for(int i=2;i<=x;i++){
        c=a+b;
        a=b;
        b=c;
    }
    return b;
}
int a[50];
int main(){
    int n;scanf("%d",&n);
    int cnt=1;
    for(int i=1;i<=25;i++){// 1.计算斐波那契数列
        a[cnt++]=Fib(i);
    }
    for(int i=1;i<=cnt;i++){// 2.
        if(a[i]>=n){
            printf("%d",i);
            break;
        } 
    }
    return 0;
}

7-63 验证“哥德巴赫猜想”

数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。
输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:
24
输出样例:
24 = 5 + 19

#include <stdio.h>

int isPrime(int x){
    if(x<=3) return 1;
    if(x%2==0 || x%3==0) return 0;
    for(int i=5;i*i<=x;i+=6){
        if(x%i==0 || x%(i+2)==0) return 0;
    }
    return 1;
}
int main(){
    int n;scanf("%d",&n);
    int p,q;
    for(int i=2;i<=n/2;i++){
        if(isPrime(i) && isPrime(n-i)){
            p=i;
            q=n-i;
            break;
        }
    }
    printf("%d = %d + %d",n,p,q);
    return 0;
}

// 20亿以内的偶数都可以分解成两个素数之和。
// 按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。
// 要求p最小

7-64 求整数的位数及各位数字之和

对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:
输入在一行中给出一个不超过10 ^9 的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:
321
输出样例:
3 6

#include <stdio.h>

int main(){
    int num;scanf("%d",&num);
    int cnt=0,sum=0;
    while(num){
        cnt++;
        sum+=num%10;
        num/=10;
    }
    printf("%d %d",cnt,sum);
    return 0;
}

7-65 输出三角形字符阵列

本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

输入格式:
输入在一行中给出一个正整数n(1≤n<7)。
输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

输入样例:
4
输出样例:
A B C D
E F G
H I
J

#include <stdio.h>

int main(){
    int n;scanf("%d",&n);
    char ch='A';
    for(int i=0;i<n;i++){
        for(int j=i+1;j<=n;j++){
            printf("%c ",ch);
            ch++;
        }
        printf("\n");
    }
    return 0;
}

7-66 找完数

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

#include <stdio.h>

int main(){
    int m,n;scanf("%d %d",&m,&n);

    int flag=0; // 区间内没有完数
    for(int i=m;i<=n;i++){
        int sum=0,X=0,cnt=0;
        for(int j=1;j<i;j++){
            if(i%j==0) {
                sum+=j;
                cnt++;
            }
        }
        if(sum==i){
            flag=1; // 区间内有完数
            printf("%d =",i);
            X=1;
        }
        if(X==1){
            for(int j=1;j<i;j++){
                if(i%j==0) {
                    printf(" %d",j);
                    if(cnt-1) printf(" +"),cnt--;
                }
            }
            printf("\n");
        }
    }
    if(!flag) printf("None");
    return 0;
}

7-67 输出整数各位数字

本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。

输入格式:
输入在一行中给出一个长整型范围内的非负整数。
输出格式:
从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。

输入样例:
123456
输出样例:
1 2 3 4 5 6

#include <stdio.h>

int a[1009];
int main(){
    long int x;scanf("%ld",&x);
    if(x==0) {
        printf("0 ");
        return 0;
    }
    int cnt=0;
    while(x){
        a[cnt++]=x%10;
        x/=10;
    }
    for(int i=cnt-1;i>=0;i--){
        printf("%d ",a[i]);
    }
    return 0;
}

7-68 近似求PI

本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。
图片
输入格式:
输入在一行中给出精度eps,可以使用以下语句来读输入:
scanf(“%le”, &eps);
输出格式:
在一行内,按照以下格式输出π的近似值(保留小数点后5位):
PI = 近似值

输入样例:
1E-5
输出样例:
PI = 3.14158

#include <stdio.h>

int main(){
    double eps;
    scanf("%le", &eps);
    double sum=1.0;
    double temp=1.0;

    for(int i=1;temp>=eps;i++){
        temp=temp*i/(2*i+1);
        sum+=temp;
    }
    printf("PI = %.5f",sum*2);
    return 0;
}
// 直到最后一项小于给定精度eps。

7-69 打印九九口诀表

下面是一个完整的下三角九九口诀表:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  

本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。

输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:
4
输出样例:

1*1=1   
1*2=2   2*2=4   
1*3=3   2*3=6   3*3=9   
1*4=4   2*4=8   3*4=12  4*4=16  
#include <stdio.h>

int main(){
    int n;scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            printf("%d*%d=%-4d",j,i,j*i);
        }
        printf("\n");
    }
    return 0;
}

7-70 到底是不是太胖了

据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。

输入格式:
输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。
输出格式:
为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!。

输入样例:
3
169 136
150 81
178 155
输出样例:
You are wan mei!
You are tai shou le!
You are tai pang le!

// 标准体重 = (身高-100)*0.9
// 完美身材:真实体重 - 标准体重 < 标准体重 * 0.1

#include <stdio.h>

struct People{
    double height; // 身高 
    double weight; // 真实体重
    double weight_bz; // 标准体重
};
int main(){
    struct People a[21];
    int n;scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%lf %lf",&a[i].height,&a[i].weight);// 厘米  市斤:公斤的两倍
        a[i].weight/=2.0; // 单位转换
        a[i].weight_bz=(a[i].height-100.0)*0.9;
    }
// 审题!?! |真实体重 - 标准体重| < 标准体重*0.1
    for(int i=0;i<n;i++){
        // printf("%d %d %d\n",a[i].weight,a[i].weight_bz,a[i].height);
        if(fabs(a[i].weight-a[i].weight_bz)<a[i].weight_bz*0.1) printf("You are wan mei!\n");
        else if(a[i].weight>a[i].weight_bz) printf("You are tai pang le!\n");
        else if(a[i].weight<a[i].weight_bz) printf("You are tai shou le!\n");
    }
    return 0;
}

// abs() 用于int类型;fabs() 用于浮点类型
// 

7-71 计算阶乘和

对于给定的正整数N,需要你计算 S=1!+2!+3!+…+N!。

输入格式:
输入在一行中给出一个不超过10的正整数N。
输出格式:
在一行中输出S的值。

输入样例:
3
输出样例:
9

#include <stdio.h>

int main(){
    int n;scanf("%d",&n);
    int ans=0;
    for(int i=1;i<=n;i++){
        int x=1;
        for(int j=1;j<=i;j++){
            x*=j;
        }
        ans+=x;
    }
    printf("%d",ans);
    return 0;
}

7-72 跟奥巴马一起画方块

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。

输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

#include <stdio.h>
#include <math.h>

int main(){
    int n;
    char c;scanf("%d %c",&n,&c);
    for(int i=0;i<round(n*0.5);i++){
        for(int j=0;j<n;j++) printf("%c",c);
        printf("\n");
    }
    return 0;
}

7-73 最佳情侣身高差

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。
下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:
2
M 1.75
F 1.8
输出样例:
1.61
1.96

#include <stdio.h>

struct CP{
    char sex;
    double height;
};
int main(){
    struct CP a[11];
    int n;scanf("%d",&n);
    getchar();
    for(int i=0;i<n;i++){
        scanf("%c %lf",&a[i].sex,&a[i].height);
        getchar();
    }
        
    // double ans;
    for(int i=0;i<n;i++){
        if(a[i].sex=='F') printf("%.2f\n",a[i].height*1.09);
        else if(a[i].sex=='M') printf("%.2f\n",a[i].height/1.09);
    }
    // printf("%.2f",1.8*1.09);
    return 0;
}

// 使用 scanf 读取字符或字符串时,其之前和之后都要使用getchar()
// 清除缓冲区的换行符

7-74 稳赢

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
图片现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
输出样例:
Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
    int n;scanf("%d",&n);getchar();
    char input[8];
    int cnt=0;
    // 1.
    // while(gets(input)){
    // // getchar();
    // 2.
    while(scanf("%[^\n]",input)){
        getchar();
        if(strcmp(input,"End")==0) break;
        cnt++;
        // printf("第%d轮 输入%s\n",cnt,input);
        if(cnt-1==n){
            if(input[0]=='J') printf("JianDao\n"); // 输入为剪刀
            else if(input[0]=='B') printf("Bu\n"); // 输入为布
            else if(input[0]=='C') printf("ChuiZi\n"); // 输入为剪刀
            cnt=0;
        }
        else{
            // 输入的出招
            if(input[0]=='J') printf("ChuiZi\n"); // 输入为剪刀
            else if(input[0]=='B') printf("JianDao\n"); // 输入为布
            else if(input[0]=='C') printf("Bu\n"); // 输入为剪刀
        }

    }
    return 0;
}

// 使用gets(s) 和 scanf("%[^\n]",s) 前需要使用getchar() 清除之前的缓冲区
// 使用gets之后,不需要使用 getchar 获取缓冲区中的换行符;
// 后者需要。
// scanf(" %c",&ch)
// scanf("%s",input)
// 该写法可以强制跳过字符前的空白字符
// 即%c前加上一个空格,表示跳过零个或多个空白字符。

7-75 幸运彩票

彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。

输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。
输出格式:
对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!;否则输出 Wish you good luck.。

输入样例:
2
233008
123456
输出样例:
You are lucky!
Wish you good luck.

#include <stdio.h>

int a[109];
int main(){
    int n;scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    int sum_pre=0,sum_last=0,cnt=0;
    for(int i=0;i<n;i++){
        sum_pre=0,sum_last=0,cnt=0;
        while(a[i]){
            cnt++;
            if(cnt<=3){
                sum_last+=a[i]%10;
                a[i]/=10;
            }
            else{
                sum_pre+=a[i]%10;
                a[i]/=10;
            }
        }
        // printf("%d %d\n",sum_pre,sum_last);
        if(sum_pre==sum_last) printf("You are lucky!\n");
        else printf("Wish you good luck.\n");
    }
    
    return 0;
}

7-76 吃鱼还是吃肉

国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。
现在你要根据小宝宝的身高体重,给出补充营养的建议。

输入格式:
输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出一位宝宝的身体数据:
性别 身高 体重
其中性别是 1 表示男生,0 表示女生。身高和体重都是不超过 200 的正整数。
输出格式:
对于每一位宝宝,在一行中给出你的建议:
如果太矮了,输出:duo chi yu!(多吃鱼);
如果太瘦了,输出:duo chi rou!(多吃肉);
如果正标准,输出:wan mei!(完美);
如果太高了,输出:ni li hai!(你厉害);
如果太胖了,输出:shao chi rou!(少吃肉)。
先评价身高,再评价体重。两句话之间要有 1 个空格。

输入样例:
4
0 130 23
1 129 27
1 130 30
0 128 27
输出样例:
ni li hai! duo chi rou!
duo chi yu! wan mei!
wan mei! shao chi rou!
duo chi yu! shao chi rou!

#include <stdio.h>

typedef struct Baby{
    int sex;
    int height;
    int weight;
}Baby;
int main(){
    Baby B[109];
    int n;scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d %d %d",&B[i].sex,&B[i].height,&B[i].weight);
    }
    for(int i=0;i<n;i++){
        // printf("%d %d %d\n",B[i].sex,B[i].height,B[i].weight);
        if(B[i].sex==1){
            // 评价身高
            if(B[i].height>130) printf("ni li hai!");
            else if(B[i].height<130) printf("duo chi yu!");
            else printf("wan mei!");
            printf(" ");
            // 评价体重
            if(B[i].weight>27) printf("shao chi rou!\n");
            else if(B[i].weight<27) printf("duo chi rou!\n");
            else printf("wan mei!\n");
        }
        else{
            // 评价身高
            if(B[i].height>129) printf("ni li hai!");
            else if(B[i].height<129) printf("duo chi yu!");
            else printf("wan mei!");
            printf(" ");
            // 评价体重
            if(B[i].weight>25) printf("shao chi rou!\n");
            else if(B[i].weight<25) printf("duo chi rou!\n");
            else printf("wan mei!\n");
        }
    }
    return 0;
}

7-77 求最大值及其下标

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:
6
2 8 10 1 9 10
输出样例:
10 2

#include <stdio.h>

int a[10];
int main(){
    int n;scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    int max=a[0],index=0;
    for(int i=1;i<n;i++){
        if(a[i]>max){
            max=a[i];
            index=i;
        }
    }
    printf("%d %d",max,index);
    return 0;
}

7-78 将数组中的数逆序存放

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。

输入样例:
4
10 8 1 2
输出样例:
2 1 8 10

#include <stdio.h>

int a[11];
int main(){
    int n;scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    for(int i=n-1;i>=0;i--) {
        if(i==0) printf("%d",a[i]);
        else printf("%d ",a[i]);
    }
    return 0;
}

7-79 字符串逆序

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
在一行中输出逆序后的字符串。

输入样例:
Hello World!
输出样例:
!dlroW olleH

#include <stdio.h>

char s[89];
int main(){
    gets(s);
    int l=0,r=strlen(s)-1;
    while(l<r){
        char tmp=s[l];
        s[l]=s[r];
        s[r]=tmp;
        l++;r--;
    }
    printf("%s",s);
    return 0;
}

7-80 统计一行文本的单词个数

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。

输入样例:
Let’s go to room 209.
输出样例:
5

// 统计单词个数,单词以空格或\0结尾,

#include <stdio.h>

char ch[1009];
char ch2[1009];
int main(){
    gets(ch);
    int res=0;

    int flag=1;
    for(int i=0;ch[i]!='\0';i++){
        if (ch[i]!=' ' && (ch[i+1]==' ' || ch[i+1]=='\0')) res++;
    }
    printf("%d",res);
    return 0;
}

7-81 统计大写辅音字母

英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出字符串中大写辅音字母的个数。

输入样例:
HELLO World!
输出样例:
4

#include <stdio.h>

char ch[81];
int main(){
    gets(ch);
    int cnt=0;
    for(int i=0;ch[i]!='\0';i++){
        if(ch[i]!='A' && ch[i]!='E' && ch[i]!='I' && ch[i]!='O' && ch[i]!='U' && (ch[i]>='A' && ch[i]<='Z'))
            cnt++;
    }
    printf("%d",cnt);
    return 0;
}

7-82 查找整数

本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”。

输入格式:
输入在第一行中给出两个正整数N(≤20)和X,第二行给出N个整数。数字均不超过长整型,其间以空格分隔。
输出格式:
在一行中输出X的位置,或者“Not Found”。

输入样例1:
5 7
3 5 7 1 9
输出样例1:
2
输入样例2:
5 7
3 5 8 1 9
输出样例2:
Not Found

#include <stdio.h>

int a[21];
int main(){
    int n,x;scanf("%d %d",&n,&x);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    int res=0,flag=0;
    for(int i=0;i<n;i++){
        if(a[i]==x){
            res=i;
            flag=1;
            break;
        }
    }
    if(flag) printf("%d",res);
    else printf("Not Found");
    return 0;
}

7-83 交换最小值和最大值

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。

输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8

#include <stdio.h>

int a[11];
int main(){
    int n;scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    int max=-1,min=999999999;
    int max_index=0,min_index=0;
    for(int i=0;i<n;i++) {
        if(a[i]>max){
            max_index=i;
            max=a[i];
        }
        else if(a[i]<min){
            min=a[i];
            min_index=i;
        }
    }
    int temp1=a[0],temp2=a[n-1]; // 记录第一个和最后一个
    if(a[0]==max && a[n-1]==min){  //1.第一个为最大值 最后一个为最小
        a[0]=temp2;
        a[n-1]=temp1;
    }
    else if(a[0]==max) { // 2.第一个为最大值
        a[0]=min;
        a[n-1]=temp1;
        a[min_index]=temp2;
    }
    else if(a[n-1]==min){ // 3.最后一个为最小
        a[n-1]=max;
        a[0]=temp2;
        a[max_index]=temp1;
    }
    else if(a[0]!=max && a[n-1]!=min){ // 最大最小值在中间
        a[0]=min;
        a[min_index]=temp1;
        a[n-1]=max;
        a[max_index]=temp2;
    }
    for(int i=0;i<n;i++) printf("%d ",a[i]);
    return 0;
}
  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值