DY 發問時間: 電腦與網際網路程式設計 · 2 0 年前

C++程式問題ABCD比大小

如何寫出一個程式

能自動比較ABCD(輸入變數)大小

我已經想出用24種排列組合的if

有人想出更簡單的嗎?

我們老師說有...

3 個解答

評分
  • Rody
    Lv 5
    2 0 年前
    最佳解答

    方法一,找出四個裡面的最大值是哪個,排除那個之後,找出剩下三個裡面最大值是哪個,以此類推,就可以找出順序了,這個方法只要比較六次就可找出答案方法二,先比較兩個數字的大小,排出兩個數字的順序,接著拿第三個數字依序來和這兩個數字比大小,決定數字要插在哪裡,就能決定三個數字的順序,最後拿第四個數字依序來和這三個數字來比大小,決定數字要插在哪裡,就能決定四個數字的順序,這個方法最快只要比較三次,最慢則要比較六次,所以比方法一有效率範例:#include <stdio.h>void main(void){int Data[4],Order[4],i,j,Times;for(i=0;i<4;i++){printf("\n 請輸入第 %d 筆整數資料:",i+1);scanf("%d",&Data[i]);}//以上是輸入四筆資料的相同程式碼,以下方法一和方法二請擇一//方法一:int temp;Times=0;//比較次數歸零for(i=0;i<4;i++)Order[i]=i;for(i=0;i<3;i++){for(j=i+1;j<4;j++){if(Data[Order[j]]>Data[Order[i]]){temp=Order[i];Order[i]=Order[j];Order[j]=temp;}Times++;//比較次數增加}}puts("\n排序前數字:");for(i=0;i<4;i++)printf("(%d): %d    ",i+1,Data[i]);puts("\n排序後數字:");for(i=0;i<4;i++)printf("(%d): %d    ",Order[i]+1,Data[Order[i]]);printf("\n排序次數:%d\n",Times);}//方法一結束://方法二:int k;Times=0;//比較次數歸零Order[0]=0;for(i=1;i<4;i++){ for(j=0;j<i;j++){  Times++;//比較次數增加  if(Data[i]>Data[Order[j]])break; } for(k=i;k>j;k--)Order[k]=Order[k-1]; Order[k]=i;}puts("\n排序前數字:");for(i=0;i<4;i++)printf("(%d): %d    ",i+1,Data[i]);puts("\n排序後數字:");for(i=0;i<4;i++)printf("(%d): %d    ",Order[i]+1,Data[Order[i]]);printf("\n排序次數:%d\n",Times);}//方法二結束:

  • 2 0 年前

    最簡單的方式就是將輸入變數之後使用氣泡排序法,大致上的作法是,

    取一個陣列Value[4];內涵ABCD四變數的值,將A與B比較若A>B則不變

    ,若A<B則交換位置,將第一個位置放最大的值,程式上妳使用兩個迴圈

    跑四次,如此就可以排列出最大到座小的值。

    參考資料: 自己
  • ?
    Lv 7
    2 0 年前

    不能用排序嗎

還有問題?馬上發問,尋求解答。