(Python) for ループ ステートメント。一般的なタスク


タスク
100 から 500 までのすべての整数の合計を求めてください。 

式を使わずにこの問題を解くプログラムを書いてみましょう。 変数 s に足し算の結果を書くだけなら、たとえば次のようになります。
\(s=100+101+102+103+...+500\),

コンピューターは算術式で省略記号を使用する方法を理解せず、100 から 500 までのすべての数字を書き込まなければならないため、記録自体に多くの時間を費やします。そして、そのようなプログラムの値は次のようになります。無視できる。特に、数値を変更して別の範囲を取りたい場合は.

何をすべきでしょうか?
上記のエントリに注意を払うと、常に "+" を使用します。
s 変数に徐々に数値を追加してみてください。たとえば、この表記法を使用すると
s=s+i.
ここで行ったこと:
1) 右側に式 s+i を入れます。 つまり、変数 s の値を取得し、変数の値を i;
2) 左側で変数 s の名前を設定します。つまり、右側の計算結果全体が同じ  変数 s に格納されるので、変数 s の値を変更します。 
必要な範囲で変数 i の値を変更するだけです。これは for.
ループで実行できます。  
範囲内の 100 から 500 までの数値は、順番に i 変数に入る必要があります。 
# 重要!まず、変数 s をリセットする必要があります。 # 最初のステップで数値 100 がゼロに加算されるように、 # メモリにあるものではありません! s = 0 for i in range(100, 501): # ループヘッダー where i s += i # 値は 100 から 500 まで 1 ずつ変化します。 # ループ本体で変数 s に徐々に追加します。   # 変化する変数 i の値を追加します。 # そして結果を変数 s に保存し直します

このソリューションは、アクションの合計を計算するのと非常によく似ています:
 \(s = 0 + 100 = 100, \\ s = 100 + 101 = 201, \\ s = 201 + 102 = 303 \\ ... \)
 
 

指定された数値の最大数

条件演算子を学習するときに、入力された複数の数値から最大の数値を見つけるというトピックに触れました。 「数字は最大4つまで」という問題では次のアルゴリズムを使用しました。
1. 変数 M の値を 4 つの変数の最初の変数に代入します。
2. 2 番目の変数の値が変数 M の値より大きい場合、変数 の値を 2 番目の変数の値で置き換えます。
3. 3 番目の変数の値が変数 M の値より大きい場合、変数 M の値を 3 番目の変数の値に置き換えます。< br /> 4. 4 番目の変数の値が M 変数の値より大きい場合、 変数の値を 4 番目の変数の値で置き換えます。

それぞれのことがわかります。次のように、変数 M と比較した数値 (X で表します):
 
疑似コード
<プレ> 入力X (M < X) の場合   M = X
このコードの主な目的は、変数 M の初期値を決定することです。
通常、最大値または最小値を求める問題を解くとき、変数 M の初期値は最初の数値に等しく割り当てられます。
したがって、上記のコードは数値の数よりも 1 回少なく実行する必要があります (最初の数値を変数 M の初期値として入力して保存する必要があるため)。
キーボードから数値の数を設定した場合 (たとえば、変数 n 内)、次のコマンドを使用してサイクル (from 2 to n) を編成できます。数値変数を格納するには同じ数値を
入力します。
自分でプログラムを書いてみてください。

最大ではない

入力されたすべての数値の中からではなく、特定の条件を満たす数値の中からのみ最大値 (最小値) を見つける必要がある場合は、最初の数値が最大値の初期値であるという事実を考慮する必要があります。 (最小) が常に要件を満たすとは限りません。

たとえば、最大の負の数を探している場合、データセットは次のとおりです: \(\{5, -2, 4, 2, -1, -3\}\ ) 最大値の初期値で数値 5 を取得します。これは正であり、負の値よりも大きくなります。したがって、条件 X > は次のようになります。 M は常に false になります。

したがって、前の問題からアルゴリズムに負の数のチェックを 1 つだけ追加するだけでは十分ではなく、最初の数が必要な条件を満たさない可能性があるという事実も考慮する必要があります (この場合、負の.

これを修正するには、ループ内に次の条件を追加します:

疑似コード
<プレ> X が負の場合、 M >= 0 または M < の場合X、それから M=X
指定されたコードでは、 M >= 0 条件により、M = X アクションを実行できます。 > 変数には最初、残りの値よりも明らかに大きい値が含まれています (この例では、値は 5 です)。

また、数値の範囲がわかっている場合は、指定された範囲の最小 (最大) 数値を最大 (最小) の初期値として使用できることにも注意してください。

タスク

N 個の数値が与えられます。シーケンス内で 2 番目に大きい要素を見つけます。

この問題では2つの解釈が可能
です。 たとえば、一連の数値 \(10\ 15\ 20\ 35\ 14\ 35\ 10\) が与えられた場合、答えは何になりますか? ?
「2 番目に大きい要素」の下にまたは単に「2 番目の最大値」は次のように理解できます。
1)すべての値を非降順で並べた(ソートした)場合に最後から2番目の位置にある値(次の値はそれぞれ前の値以上になります)。次に、考慮された一連の数値の答えは値 35 になります。
2) 最大値よりも大きい要素の値。すると答えは20になります
。 数値の集合の中に最大の要素が 1 つだけある場合 (他はすべて小さい)、どちらの解釈も同じで、どちらの場合でも答えは同じになります。それ以外の場合、答えは異なります。

最初のケースを考えてみましょう (アルゴリズムは 疑似コード)。
答えを見つけるために、次の 2 つの変数を使用します。
1) maximum1 - 最大値 (最初の最大値);
2) maximum2 - 2 番目の最大値 (私たちの答え)。

値の変化の範囲がわかっている場合は、範囲の下限より明らかに小さい数値を初期値として採用します (たとえば、-1000 の範囲) から 1000 - 数字を入力します -1001)
値の範囲が不明な場合は、最初の 2 つの入力数値を変数 max1 max2 の初期値に書き込み、これらを比較できます。 2 つの変数。 <プレ> input N //数値の数 a、bを入力 max1 = a max2 = b b > の場合ああ、それでは     max1 = b     max2 = a
次に、他のすべての要素を検討します (最初の 2 つはすでに表示されているため、3 番目から始めます)。 <プレ> nc for i 3 から n を入力してください >の場合Maximum1 //maximum1 より大きい値がありました それか max2 = max1 //前の最初の高値が 2 番目の高値になります max1 = a //新しい要素が最初の最大値になります さもないと // 次の要素は max1 を超えないようにします // max2 の値と比較する必要があります >の場合最大2 それか max2 = a //それを新しい値として受け取ります max2 // この場合、max1 は変更されません 全て 全て kts
このアルゴリズムを自分で実装してみてください。