华为2014年机试题1

来源:互联网 发布:java正则表达式实例 \ 编辑:程序博客网 时间:2024/05/16 14:09
//华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和//输入以逗号隔开#include<stdio.h>#define N 50void  sort(inta[],intn);int  main(void){    charstr[100];    inta[N]={0};       gets(str);     //要点1:动态的输入1--50个整数,不能确定个数,只能用字符串输入,然后分离出来    inti=0;    intj=0;    intsign=1;    while(str[i]!='\0')    {        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]=='\0') //这个判断是在i自加以后            j++;   //j就是a数组的个数 范围0到j-1    }    sort(a,j);    printf("Max number + Min number = %d",a[0]+a[j-1]);    return0;}void  sort(inta[],intn)  //选择排序{    inti,j;    intk;    inttemp;    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("");}