問題:大小交換
給定一個長度為N的數列,先將輸入的一系列整數中的最小值與第一個數交換,然后將最大值與最后一個數交換,最后輸出交換后的序列。(保證最大和最小值都是唯一的。)
輸入描述:
輸入在第一行中給出一個正整數N(≤1000),第二行給出N個整數,數字間以空格分隔。
輸出描述:
在一行中順序輸出交換后的序列,每個整數后跟一個空格。
示例 1:
輸入:
5
8 2 5 1 4
輸出:
1 2 5 4 8
#include <bits/stdc++.h>
using namespace std;
?
int main() {
? ? // 請補全代碼,實現題目功能
? ? int nums[1001];
? ? int n;
? ? int a;
? ? int b;
? ??
? ? cin >> n;
? ? //nums[n];
? ? for (int i = 0; i < n; i++) {
? ? ? ? cin >> nums[i];
? ? }
? ? //用a記錄最小值的下表,b記錄最大值的下表
? ? a = 0; b = 0;
? ? for (int i = 0; i < n; i++)
? ? {
? ? ? ? if (nums[i] > nums[b]) b = i; //記錄最大值的下標
? ? ? ? if (nums[i] < nums[a]) a = i; //記錄最小值的下標
? ? }
?
?
? ??
?
? ? //將最小值與第一個交換位置
? ? int t = nums[0];
? ? nums[0] = nums[a];
? ? nums[a] = t;
?
? ? //判斷最大值是否再第一個位置
? ? if (b == 0)
? ? ? ? b = a; //最大值變成a所在的位置
?
? ? //將最大值與最后一個交換位置
? ? t = nums[b];
? ? nums[b] = nums[n - 1];
? ? nums[n - 1] = t;
? ? //輸出交換后的序列
? ? for (int i = 0; i < n; i++) {
? ? ? ? if (i < n - 1)
? ? ? ? ? ? cout << nums[i] << " ";
? ? ? ? else
? ? ? ? ? ? cout << nums[i];
? ? }
?
?
?
? ? return 0;
}
?