回答受付が終了しました

入力したn個のデータを昇順ソートし、最大値と最小値を除いたn-2個の数値の和を計算するプログラムをC、C++、Pythonあたりの言語で書く方法を教えてください。

回答(3件)

0

ソートすることが必須ですか? それとも、単に「最大値と最小値を除いたn-2個」を処理できればOKですか?

0

C++言語です。 #include <iostream> #include <vector> #include <cstdlib> // exit() using namespace std; void dsp(const vector<int>& ary) {     size_t i = 0;     for (const auto &e : ary)         cout << (++i == 1 ? "" : " ") << e;     cout << endl; } void bubble_sort(vector<int>& ary) {     const size_t last = ary.size()-1;     for (size_t i = 0; i < last; ++i)         for (size_t j = last; j > i; --j)             if (ary[j-1] > ary[j])                 swap(ary[j-1], ary[j]); } // 配列はソート済みであること。 int sum_exclude_minmax(const vector<int>& ary) {     // 総和を計算します     int sum = 0;     for (const auto& e : ary)         sum += e;     // minとmaxを引きます。整列済みなのでfront:min, back:maxです     return sum - ary.front() - ary.back(); } int main(void) {     int n;     cout << "n> ";     cin >> n;     if (n < 3) {         cerr << "3以上にして下さい" << endl;         exit(1);     }     vector<int> in(n);     cerr << n << " 個の数値をスペースか改行で区切って入力して下さい" << endl;     for (auto& e : in)         cin >> e;     bubble_sort(in);     dsp(in);     cout << "最小値と最大値を除いた総和: " << sum_exclude_minmax(in); }

不適切な内容が含まれている可能性があるため、非表示になっています。

0

#include <stdio.h> #include <stdlib.h> int main(void){     int i, j, n, temp, sum = 0;     int *p;     printf("n> ");     scanf("%d", &n);     p = (int*)malloc(sizeof(int) * n);     for(i = 0; i < n; i++){         printf("%d: ", i + 1);         scanf("%d", &p[i]);     }     for(i = 0; i < n - 1; i++){         for(j = i + 1; j < n; j++){             if(p[i] > p[j]){                 temp = p[i];                 p[i] = p[j];                 p[j] = temp;             }         }     }     for(i = 1; i < n - 1; i++){         sum += p[i];     }     printf("%d\n", sum);     free(p);     return 0; }

n = int(input('n> ')) d = list() for i in range(n):     d.append(int(input(f'{i+1}: '))) d.sort() print(sum(d[1:-1]))