当前位置:编程学习 > C/C++ >>

华为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]!='\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]);


    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]!='\0')
    {
        if(str[i]!=',')  //输入时要在半角输入
        {

            if(str[i] == '-')    //要点:2:有负整数的输入
            {
               // i++;   //易错点1
                sign=-1;
            }
            else if(str[i]!='\0') //不用else的话,负号也会减去‘0’
           {
               a[j]=a[j]*10 + str[i]-'0'; //要点3:输入的可以是多位数

           }
        }
        i++;
        if(str[i]==',' || str[i]=='\0')  //这个判断是在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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,