【題解】APCS1081026-1 樂曲修改

【題目敘述】http://judge.epass2u.com/problem/APCS1081026-1 (無法使用)
【解題想法】算術運算

  • median( ):找出三個數字的中位數。
    • 【方法1】排序後取中間那一個。
    • 【方法2】三個數字的和,減去max,再減去min。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int a[35];

//【方法1】排序後取中間那一個。
int median(int i){
	int b[3] = {a[i-1], a[i-2], a[i-3]};
	sort(b, b+3);
	return b[1];
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	int n;
	while (cin >> n){
		for (int i=0; i<n; i++){
			cin >> a[i];
		}
		for (int i=3; i<n; i++){
			if (abs(a[i] - a[i-1]) < 5) continue;
			a[i] = median(i);
		}
		for (int i=0; i<n; i++)
			cout << a[i] << ' ';
		cout << '\n';
	}

    return 0;
}
//【方法2】三個數字的和,減去max,再減去min。
int median(int i){
    int ans = a[i-1] + a[i-2] + a[i-3];
    ans -= max(a[i-1], max(a[i-2], a[i-3]));
    ans -= min(a[i-1], min(a[i-2], a[i-3]));
    return  ans;
}

Python code (credit: Amy Chou)

def median(i):
    b = [a[i-1], a[i-2], a[i-3]]
    b.sort()
    return b[1]
 
# main program
n = int(input())
a = list(map(int, input().split()))
 
for i in range(3, n):
    if abs(a[i] - a[i-1]) < 5:
        continue
    else:
        a[i] = median(i)
 
for i in range(n):
    print(a[i], ' ', sep='', end='')
print()
分享本文 Share with friends