zoukankan      html  css  js  c++  java
  • 华为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函数,值得尝试。

  • 相关阅读:
    java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁(转)
    MySQL存储引擎--MyISAM与InnoDB区别
    Socket详解
    Java线程池参数
    Java反射机制(转)
    java注解
    docker入门实例
    docker常用命令总结
    showdoc 自动脚本安装
    [mysql]You must reset your password using ALTER USER statement before executing this statement.
  • 原文地址:https://www.cnblogs.com/pangblog/p/3327447.html
Copyright © 2011-2022 走看看