華爲歷年機試題型總結系列(七)

18.身高排序

輸入一組身高在170到190之間(5個身高),比較身高差,選出身高差最小的兩個身高;若身高差相同,選平均身高高的那兩個身高;從小到大輸出:

如輸入:170 181 173 186 190 輸出:170 173

#include<stdio.h>

int main(void)
{
     int pInputStr[5]={0};
     int pOutputStr[2]={0};
     int height_diverse[4]={0};
     int i,j,temp,min_diverse=100;
  
     printf("Input 5 heights:\n");
     for(i=0;i<5;++i)
         scanf("%d",&pInputStr[i]);
     
     for(i=0;i<4;++i)
     {
           for(j=0;j<4-i;++j)
           {
                if(pInputStr[j]>pInputStr[j+1])   //冒泡升序排列
                {
                        temp=pInputStr[j];
                        pInputStr[j]=pInputStr[j+1];
                        pInputStr[j+1]=temp;
                 }
            }
     }

     for(i=0;i<4;++i)
         height_diverse[i]=pInputStr[i+1]-pInputStr[i]; //升序排列,相鄰之間的差爲最小差

     for(i=0;i<4;++i)
         min_diverse=(min_diverse<height_diverse[i])?min_diverse:height_diverse[i]; //最小身高差
    
      for(i=0;i<4;++i)
      {
           if(height_diverse[i]==min_diverse)  //因爲升序排列,當出現相同身高差時,平均身高大的會覆蓋平均身高小的
           {
                 pOutputStr[0]=pInputStr[i];
                 pOutputStr[1]=pInputStr[i+1];
           }
      }

      printf("The minist diverse height: %d,%d",pOutputStr[0],pOutputStr[1]);

      return 0;
}

19.數字大小

輸入一串字符,只包含“0-10”和‘,’找出其中最大和最小數字(可能不止一個),輸出最後剩餘數字。如輸入:3,3,4,5,6,77 輸出:4,5,6 輸入:2,5,4,10,5,2 輸出:5,4,5

#include<stdio.h>
#include<string.h>

void DeleteMinMax(char *pInputStr, int StrLength, int *pOutputStr)
{
     int i,j=0,k=0,max_number=0,min_number=50;
     int pOutputStr_Int[50]={0};
     for(i=0;i<StrLength;)
     {
         if(pInputStr[i]==',')
                  ++i;
         else if(pInputStr[i+1]=='0')  //10的情況
         {
                 pOutputStr_Int[j++]=10;
                 i+=2;
         }             
         else         //0-9的情況
                 pOutputStr_Int[j++]=pInputStr[i++]-48; //0-9字符轉換成對應的數字
     }

      for(i=0;i<j;++i)
      {
            max_number=(max_number>pOutputStr_Int[i])?max_number:pOutputStr_Int[i];
            min_number=(min_number<pOutputStr_Int[i])?min_number:pOutputStr_Int[i];
      }

      for(i=0;i<j;)
      {
             if(pOutputStr_Int[i]==max_number||pOutputStr_Int[i]==min_number)
                   ++i;
             else    //輸出除了最大最小值之外的數字
                  pOutputStr[k++]=pOutputStr_Int[i++];
      }

      for(i=0;i<k;++i)
      printf("%d,"pOutputStr[i]);
}

int main(void)
{
    char pInputStr[50];
    int pOutputStr[50]={0};
    int StrLength,i;
    printf("Input the numbers and use ',' to seperate each other:\n");
    gets(pInputStr);
    StrLength=strlen(pInputStr);

    DeleteMinMax(pInputStr,StrLength,pOutputStr);
    
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章