輸入n個人的身高,然後從n個人中選出身高差值最小的兩個人作為禮儀(如果差值相同的話,選取其中最高的兩個人),要求輸出兩個禮儀的身高。

莞工傑仔發表於2020-12-12

題目如下:

編寫一個C程式,實現以下功能:
輸入n個人的身高,然後從n個人中選出身高差值最小的兩個人作為禮儀(如果差值相同的話,選取其中最高的兩個人),要求輸出兩個禮儀的身高。

對題目的淺度分析:

1.首先使用一位陣列將身高資料進行儲存
2.使用選擇排序法對身高從小到大進行排序,注意是從小到大,因為題目要求如果身高差值相同,則取身高較高的兩人
3.找出身高的最小差值,如果並記錄下這兩個禮儀的身高,如果在
迴圈中出現了更小的身高差值,則將禮儀的身高進行替換

程式碼如下:

 #include <stdio.h>
  #include <math.h>
  void main()
  {
      int a[100];
      int n,i;
      void search1(int *p,int m);
      void sort1(int *q,int k);
      printf("輸入禮儀的人數:");
      scanf("%d",&n);
      printf("輸入禮儀的身高:");
      for (i = 0;i <= n - 1;i++)
      {
           scanf("%d",&a[i]);
      }
      sort1(a,n);
      search1(a,n);
  }
  void  sort1(int* q,int k)
  {
      int i, j,temp;
      for (i = 0;i <= k - 2;i++)
      {
           for (j = i + 1;j  <= k -  2;j++)
           {
               if (q[i] > q[j])
               {
                    temp  = q[i];
                    q[i] = q[j];
                    q[j] = temp;
               }
           }
      }
  }
  void  search1(int* p, int m)
  {
      int i = 0;
      int min, h1, h2;
      min  = (int)fabs(*(p + 1) - *(p + 0));
      for (i = 0;i <= m - 2;i++)
      {
           if ((int)fabs(*(p + i+1) - *(p + i)) <= min)
           {
               min=  (int)fabs(*(p + i+1) - *(p + i));
               h1  = *(p + i +  1);
               h2  = *(p + i);
           }
      }
      printf("身高的最小差值為:%d  禮儀身高分別為:%d  %d\n",min,h1,h2);
  }  

相關文章