回答編集履歴

1

追記

2023/01/30 06:09

投稿

fana
fana

スコア11632

test CHANGED
@@ -31,3 +31,40 @@
31
31
  return 0;
32
32
  }
33
33
  ```
34
+
35
+ ---
36
+
37
+ [追記]
38
+ 上記と異なる方針:
39
+
40
+ * 入力値を一旦配列に全部格納してから処理する
41
+ * 「足すべきものだけを足す」という方向で集計処理を行う
42
+
43
+ という場合,
44
+ 最小値/最大値 そのものではなくて「配列の何番目の要素が 最小/最大 なのか」という情報を扱うようにすると,最後の集計処理の話が簡単になるかもしれません.
45
+
46
+ ```C
47
+ int main( void )
48
+ {
49
+ //※str[]への入力部分は本質でないので省略
50
+ int str[5] = { 1,1,3,5,5 };
51
+
52
+ //iMin, iMax は 最小/最大 な要素のindex.
53
+ //すなわち,最小値は str[iMin], 最大値は str[iMax]
54
+ int iMin=0, iMax=0;
55
+ for( int i=1; i<5; ++i )
56
+ {
57
+ if( str[i] < str[iMin] ){ iMin = i; }
58
+ if( str[i] > str[iMax] ){ iMax = i; }
59
+ }
60
+
61
+ //集計:ここがこんな感じで楽になる
62
+ int Sum = 0;
63
+ for( int i=0; i<5; ++i )
64
+ {//最小でも最大でもない要素の値だけを足していく
65
+ if( i!=iMin && i!=iMax ){ Sum += str[i]; }
66
+ }
67
+ printf( "%d\n", Sum );
68
+ return 0;
69
+ }
70
+ ```