• 华为2014年机试题1


    //华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和
    //输入以逗号隔开
    #include<stdio.h>
    #define N 50
    void sort(int a[],int n);
    int main(void)
    {
    
    
    
    
        char str[100];
        int a[N]={0};   
        gets(str);      //要点1:动态的输入1--50个整数,不能确定个数,只能用字符串输入,然后分离出来
        int i=0;
        int j=0;
        int sign=1;
        while(str[i]!='')
        {
            if(str[i]!=',')  //输入时要在半角输入
            {
                sign=1;
                if(str[i] == '-')    //要点:2:有负整数的输入
                {
                    i++;
                    sign=-1;
                }
                a[j]=a[j]*10 + str[i]-'0'; //要点3:输入的可以是多位数
                a[j]*=sign;            //【这里有BUG,如-12,会变成-10+2,应该对结果乘以符号,而不是每一位乘以符号】
            }
            i++;  
            if(str[i]==',' || str[i]=='')  //这个判断是在i自加以后
                j++;    //j就是a数组的个数 范围0到j-1
    
    
        }
    
    
        sort(a,j);
        printf("Max number + Min number = %d",a[0]+a[j-1]);
    
    
        return 0;
    }
    void sort(int a[],int n)  //选择排序
    {
        int i,j;
        int k;
        int temp;
        for(i=0;i<n-1;i++)
        {
            k=i;
            for(j=i+1;j<n;j++)
            {
                if(a[k]>a[j])
                    k=j;
            }
            if(i!=k)
            {
                temp = a[k];
                a[k] = a[i];
                a[i] = temp;
            }
        }
        for(i=0;i<n;i++)
            printf("%-5d",a[i]);
        puts("");
    }


    完善版:

    //华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和
    //输入以逗号隔开
    #include<stdio.h>
    #define N 50
    void sort(int a[],int n);
    int main(void)
    {
    
    
        char str[100];
        int a[N]={0};
        gets(str);      //要点1:动态的输入1--50个整数,不能确定个数,只能用字符串输入,然后分离出来
        int i=0;
        int j=0;
        int sign=1;
        while(str[i]!='')
        {
            if(str[i]!=',')  //输入时要在半角输入
            {
    
                if(str[i] == '-')    //要点:2:有负整数的输入
                {
                   // i++;   //易错点1
                    sign=-1;
                }
                else if(str[i]!='') //不用else的话,负号也会减去‘0’
               {
                   a[j]=a[j]*10 + str[i]-'0'; //要点3:输入的可以是多位数
    
               }
            }
            i++;
            if(str[i]==',' || str[i]=='')  //这个判断是在i自加以后
            {
                 a[j]=a[j]*sign;  //易错点2
                 sign=1;   ////易错点3
                 j++;    //j就是a数组的个数 范围0到j-1
            }
    
    
        }
    
        sort(a,j);
        printf("Max number + Min number = %d",a[0]+a[j-1]);
    
        return 0;
    }
    void sort(int a[],int n)  //选择排序
    {
        int i,j;
        int k;
        int temp;
        for(i=0;i<n-1;i++)
        {
            k=i;
            for(j=i+1;j<n;j++)
            {
                if(a[k]>a[j])
                    k=j;
            }
            if(i!=k)
            {
                temp = a[k];
                a[k] = a[i];
                a[i] = temp;
            }
        }
        for(i=0;i<n;i++)
            printf("%-5d",a[i]);
        puts("");
    }
    

    结果:



    这个题用C做,要考虑的东西太多了

    如果用java做,可以用split函数,值得尝试。

  • 相关阅读:
    【GIS】SuperMap加载三维服务
    【GIS】SuperMap-Web3D-Sql查询示例
    【GIS】Cesium绘制轨迹线
    【GIS】Cesium地下模式设置
    【Java】jfinal-layui:org.postgresql.util.PSQLException: ERROR: syntax error at or near "value" 位置:11
    【Java】jfinal-layui、postgres
    【JavaScript】js注入
    【可视化】地质油藏可视化之四-面元渐进涂色
    【可视化】地质油藏可视化之三-基于threejs绘制三维zmap数据
    【可视化】地质油藏可视化之一-zmap数据转换
  • 原文地址:https://www.cnblogs.com/pangblog/p/3327447.html
Copyright © 2020-2023  润新知