(Java) For 循环语句。典型任务


让我们尝试编写一个程序来解决以下问题:
求出 100 到 500 之间所有整数的总和。

解决这个问题时,求和就变得困难了。如果我们简单地将加法的结果写到变量 s 中,例如,作为

s=100+101+102+103+...+500

记录本身会花费很多时间,因为计算机不会理解如何在算术表达式中使用省略号,我们必须将 100 到 500 的所有数字写入这个和。这样一个程序的价值可以忽略不计。特别是如果我们想改变我们的数字并采用不同的范围。

我们该怎么办?

如果我们注意上面的条目,那么我们经常使用加法“+”。
您可以尝试逐渐将数字添加到变量 s 中。例如,使用这个符号
s=s+i;
我们在这里做了什么:
1) 在右边我们放置了表达式s+i, ,也就是说,我们取了变量s的值,我们现在已经在内存中了,然后加上这个值变量 i< to it /strong>
2)左边我们设置了变量名 s,即右边计算的全部结果都会保存在这个变量中,所以我们要改变变量的值s. 

我们从哪里可以得到范围内的数字?

从 100 到 500 属于我们范围的数字应该一个一个地落入 i 变量。这可以使用众所周知的 for
循环来完成 例如,以这种方式 <前> s=0; //开始时需要重置变量 s,以便在第一步将数字 100 添加到零,而不是内存中的内容! for ( i = 100; i<=500; i++) // 循环头,其中变量 i 的值从 100 变为 500,增量为 1 小号 = 小号 + 我; //循环体,在这个循环中我们逐渐将不断变化的变量i的值加到变量s中 // 并将结果存储回变量 s 这个方案和按动作求和很相似
 s = 0 + 100 = 100
 s = 100 + 101 = 201
 s = 201 + 102  = 303
ETC。

给定数中的最大数

在研究条件运算符时,我们谈到了从输入的多个数字中找到最大数字的主题。在“四个数的最大值”问题中我们使用了以下算法:
1. 将变量M的值赋给四个变量中的第一个;
2. 如果第二个变量的值大于变量M中的值,则将变量的值替换为第二个变量的值;
3. 如果第三个变量的值大于变量M中的值,则用第三个变量的值替换变量M的值;< br /> 4. 如果第四个变量的值大于M变量中的值,则用第四个变量的值替换变量的值。

可以看出,每一个 我们与变量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。

因此,仅在上一题的算法中添加一个负数检查是不够的,还需要考虑到第一个数字可能不满足要求的条件(在这种情况下,为负数) ).

您可以通过在循环内添加以下条件来解决此问题:

伪代码
<前> 如果 X 为负,则 如果 M >= 0 或 M <; X,那么 M=X
在指定的代码中, M >= 0 条件允许您执行  M = X 操作,即使 变量最初包含一个明显大于其余值的值(在我们的示例中,该值等于 5)。

我们还注意到,如果已知数字的范围,则可以将指定范围内的最小(最大)数字作为最大(最小)值的初始值。

任务

给出了 N 个数字。查找序列中第二大的元素。

这个问题有两种解释。
例如,如果给我们一组数字:\(10\ 15\ 20\ 35\ 14\ 35\ 10\),那么答案应该是什么?
在“第二大元素”下或者简称“次大”,可以理解为:
1) 如果我们将所有值\u200b\u200bin 非降序排列(排序)(每一个都大于或等于前一个),将会在倒数第二位的值。那么对于所考虑的一组数字,答案将是值 35;
2) 元素的值,仅大于最大值。那么答案是20。
如果数字集合中只有一个最大元素(其他的都更少),那么两种解释都是一样的,两种情况的答案都是一样的,否则答案是不同的。

考虑第一种情况(我们将在 伪代码).
为了找到答案,我们将使用两个变量:
1)maximum1——最大值(第一个最大值);
2) maximum2 - 第二个最大值(我们的答案)。

如果值变化的范围是已知的,那么我们取一个明显小于范围下限的数字作为初始值(例如,范围从 -1000 1000 -取数 -1001)
如果取值范围未知,那么可以将前两个输入的数分别写入变量max1max2的初始值,然后比较这些两个变量。 <前> input N //数字个数 输入 a, b 最大值 1 = 一个 最大值2 = b 如果 b >一个,然后    最大值 1 = b     max2 = 一个
接下来,我们考虑所有其他元素(前2个已经看过,所以我们从第3个开始) <前> nc 代表我从 3 到 n 输入一个 如果一个> maximum1 //有一个值大于maximum1 那 max2 = max1 //之前的第一个高点变成第二个 max1 = a //新元素将是第一个最大值 否则 //下一个元素不超过max1 // 需要和maximum2值比较 如果一个>最多 2 那 max2 = a //作为新值max2 // 在这种情况下 max1 不会改变 全部 全部 节拍
尝试自己实现这个算法。