輸入 7 個整數,先去除重複元素,再輸出去重後的最大值與次大值。
雙層循環遍歷,發現重複時將後續元素前移覆蓋,長度 `len` 遞減,內層索引 `m` 回退重新比較。
int len = 7;
for (int j = 0; j < len; ++j) {
for (int m = j + 1; m < len; ++m) {
if (a[j] == a[m]) {
for (int k = m + 1; k < len; ++k)
a[k-1] = a[k]; // 覆蓋刪除
--len;
--m; // 當前位置已換新值,需重新比較
}
}
}
for (int n = 0; n < len; ++n)
for (int p = n + 1; p < len; ++p)
if (a[n] <= a[p]) swap(a[n], a[p]);
// a[0] 為最大,a[1] 為次大
#include <stdio.h>
int main() {
int a[7];
printf("input seven numbers: ");
for (int i = 0; i < 7; ++i) scanf("%d", &a[i]);
int len = 7;
for (int j = 0; j < len; ++j)
for (int m = j + 1; m < len; ++m)
if (a[j] == a[m]) {
for (int k = m + 1; k < len; ++k) a[k-1] = a[k];
--len; --m;
}
printf("去重後: ");
for (int i = 0; i < len; ++i) printf("%d ", a[i]);
printf("\n");
for (int n = 0; n < len; ++n)
for (int p = n + 1; p < len; ++p)
if (a[n] <= a[p]) { int t=a[n]; a[n]=a[p]; a[p]=t; }
printf("排序後: ");
for (int i = 0; i < len; ++i) printf("%d ", a[i]);
printf("\nMAX=%d, S_MAX=%d\n", a[0], a[1]);
return 0;
}
input seven numbers: 7 5 7 5 8 6 8 去重後: 7 5 8 6 排序後: 8 7 6 5 MAX=8, S_MAX=7
本文整理自 “Jean_Z的學習博客”,原文鏈接:https://7905490.blog.51cto.com/7895490/1299815