[C] 排序取最大最小
某天某月看到某題目,好久沒發程式語言的文章了就來發一篇救救同學吧。其實這個題目應該是很簡單的,看到題目第一秒就想到直接氣泡排序法(因為我懶惰,用比較簡單的演算法)然後取頭尾就搞定了,結果很不幸的寫完之後想到了一件事...
恩,就是,老師根本還沒教到這邊啊!!!才剛提到「for 迴圈」而已,要怎麼跟同學解釋「陣列」等等概念呢 = =囧
題目:寫一個程式向使用者要求輸入五個整數。該程式將輸出其最大最小值。
以氣泡排序法從小到大排列,取頭尾(最小最大)值:
(感謝學長與網友糾正我錯誤的寫法,已修正。)
然後後來想了半天用單純全部 if if if... 搞出來的,數列逐次比對,從大排到最小取頭尾(最大最小)值:
總之想打這篇只是因為那一堆 if 實在很累人,還好題目只有五個數...
0925 新增參考答案,其實這題最簡單的寫法就是直接取大小...
恩,就是,老師根本還沒教到這邊啊!!!才剛提到「for 迴圈」而已,要怎麼跟同學解釋「陣列」等等概念呢 = =囧
題目:寫一個程式向使用者要求輸入五個整數。該程式將輸出其最大最小值。
以氣泡排序法從小到大排列,取頭尾(最小最大)值:
(感謝學長與網友糾正我錯誤的寫法,已修正。)
#include <stdio.h>
int main() {
while(1){
printf("Please enter five integers: ");
int a[5], i;
for(i = 0; i < 5; i++){
scanf("%d", &a[i]);
}
int j = 0, temp = 0;
for( i = 0; i < 5; i++) {
for( j = 0; j < 4 - i; j++) {
if( a[j] < a[j+1] ) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
printf("The largest is %d\nThe smallest is %d\n", a[4], a[0]);
}
}
然後後來想了半天用單純全部 if if if... 搞出來的,數列逐次比對,從大排到最小取頭尾(最大最小)值:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a,b,c,d,e;
int temp;
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
//大到小
if(a>b){
temp = b;
b = a;
a = temp;
}
if(a>c){
temp = c;
c = a;
a = temp;
}
if(a>d){
temp = d;
d = a;
a = temp;
}
if(a>e){
temp = e;
e = a;
a = temp;
}
//
if(b>c){
temp = c;
c = b;
b = temp;
}
if(b>d){
temp = d;
d = b;
b = temp;
}
if(b>e){
temp = e;
e = b;
b = temp;
}
if(b>a){
temp = a;
a = b;
b = temp;
}
//
if(c>d){
temp = d;
d = c;
c = temp;
}
if(c>e){
temp = e;
e = c;
c = temp;
}
if(c>a){
temp = a;
a = c;
c = temp;
}
if(c>b){
temp = b;
b = c;
c = temp;
}
//
if(d>e){
temp = e;
e = d;
d = temp;
}
if(d>a){
temp = a;
a = d;
d = temp;
}
if(d>b){
temp = b;
b = d;
d = temp;
}
if(d>c){
temp = c;
c = d;
d = temp;
}
//
if(e>a){
temp = a;
a = e;
e = temp;
}
if(e>b){
temp = b;
b = e;
e = temp;
}
if(e>c){
temp = c;
c = e;
e = temp;
}
if(e>d){
temp = d;
d = e;
e = temp;
}
printf("The largest is %d\n",a);
printf("The smallest is %d\n",e);
}
原來一開始寫得有小問題,結果後來看一看反而比較像選擇排序法的樣子...總之想打這篇只是因為那一堆 if 實在很累人,還好題目只有五個數...
0925 新增參考答案,其實這題最簡單的寫法就是直接取大小...
#include <stdio.h>
main()
{
int a1, a2, a3, a4, a5;
int min, max;
while(1){
printf("Please enter five integers: ");
scanf("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
min = a1;
max = a1;
if(a2 > max) max = a2;
if(a3 > max) max = a3;
if(a4 > max) max = a4;
if(a5 > max) max = a5;
if(a2 < min) min = a2;
if(a3 < min) min = a3;
if(a4 < min) min = a4;
if(a5 < min) min = a5;
printf("The largest is %d\n", max);
printf("The smallest is %d\n\n", min);
}
}

這個題目因為輸出僅兩個數字的關係,
回覆刪除所以只需要用兩個變數去記最大跟最小。
第一次輸入的數字 a1 = max = min
接著每次輸入完就比對一次,最後在印出 max min 就好