• C语言程序设计教程(第三版)课后习题10.3


    1352: C语言程序设计教程(第三版)课后习题10.3

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 813  Solved: 274
    [Submit][Status][BBS]

    Description

    输入10个整数,把最大的数与最后一个数对换。写三个函数;再将其中最小的数与第一个数对换, ①输入10个数;②进行处理;③输出10个数。

    Input

    10个整数

    Output

    整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)

    Sample Input

    2 1 3 4 5 6 7 8 10 9

    Sample Output

    1 2 3 4 5 6 7 8 9 10 


    错误的代码:
    #include <stdio.h>
    const int N=1<<29;
    int a[15],min1=N,max1=-N,b,k;
    void make()
    {
        for(int i=0;i<10;i++)
        {
            if(a[i]>max1)
               {   k=i;
                   max1=a[i];
               }
              if(a[i]<min1)
               {
                   b=i;
                   min1=a[i];
               }
        }
        int temp;
        temp=a[b];
        a[b]=a[0];
        a[0]=temp;
    
        temp=a[k];
        a[k]=a[9];
        a[9]=temp;
    
    }
    void print()
    {
        int i;
        for(i=0;i<10;i++)
        {
            printf("%d ",a[i]);
        }
        printf("
    ");
    }
    int main()
    {
    
        while(scanf("%d",&a[0])!=EOF)
        {
          min1=N;max1=-N;
          for(int i=1;i<10;i++)
          {
              scanf("%d",&a[i]);
          }
          make();
          print();
        }
    }

    刚刚开始这样交,怎么改都是错的,然后去请教大神,才知道正确的应该是这样

    #include <stdio.h>
    const int N=1<<29;
    int a[15],min1,max1,b,k;
    void make()
    {
        for(int i=0; i<10; i++)
        {
    
            if(a[i]<min1)
            {
                b=i;
                min1=a[i];
            }
        }
        int temp;
        temp=a[b];
        a[b]=a[0];
        a[0]=temp;
        for(int i=0; i<10; i++)
        {
            if(a[i]>max1)
            {
                k=i;
                max1=a[i];
            }
        }
        temp=a[k];
        a[k]=a[9];
        a[9]=temp;
    
    }
    void print()
    {
        int i;
        for(i=0; i<10; i++)
        {
            printf("%d ",a[i]);
        }
        printf("
    ");
    }
    int main()
    {
    
        scanf("%d",&a[0]);
        {
            min1=N;
            max1=-N;
            for(int i=1; i<10; i++)
            {
                scanf("%d",&a[i]);
            }
            make();
            print();
        }
    }

    因为:

    比如测试数据是 :10 9 8 7 6 5 4 3 2 1时

    第一组代码会这样:

    最小值1先和第1个值10换

    最大值10再和最后1个值1换

    相当于换了两次

    最终还是10 9 8 7 6 5 4 3 2 1

    第二组代码会这样:

    最小值1先和第1个值10换

    然后最大值10和最后一个值10换

    这时10本来就是最后一个值,相当于自己和自己换了一次

    所以结果是:1 9 8 7 6 5 4 3 2 10

  • 相关阅读:
    【中位数 均分纸牌】 糖果传递
    【模板】 均分纸牌
    【离散化】 电影
    【离散化】 区间和
    【最大子矩阵】 城市游戏
    vue中如何引入Element-ui
    详细教你:如何搭建vue环境和创建一个新的vue项目
    vue中如何引入bootstrap
    十天冲刺(4)
    十天冲刺(3)
  • 原文地址:https://www.cnblogs.com/tianmin123/p/5015150.html
Copyright © 2020-2023  润新知