任务
求出 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 被添加到零,
# 而不是内存中的内容!
小号 = 0
for i in range(100, 501): # 循环头,其中 i
s += i # 将其值从 100 更改为 500,步长为 1,
# 在循环体中逐渐到变量s,
# 添加变化变量 i 的值,
# 并将结果保存回变量 s
此解决方案与计算操作的总和非常相似:
\(s = 0 + 100 = 100, \\ s = 100 + 101 = 201, \\ s = 201 + 102 = 303 \\ ... \)跨度
|
给定数中的最大数
在研究条件运算符时,我们谈到了从输入的多个数字中找到最大数字的主题。在“四个数的最大值”问题中我们使用了以下算法:
1. 将变量M 的值赋给四个变量中的第一个;
2. 如果第二个变量的值大于变量M 中的值,则将变量M 的值替换为第二个变量的值;
3. 如果第三个变量的值大于变量M 中的值,则用第三个变量的值替换变量M 的值;< br />
4. 如果第四个变量的值大于M 变量中的值,则用第四个变量的值替换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 操作,即使 M 变量最初包含一个明显大于其余值的值(在我们的示例中,该值等于 5)。
我们还注意到,如果已知数字的范围,则可以将指定范围内的最小(最大)数字作为最大(最小)值的初始值。
|
任务
给出了 N 个数字。查找序列中第二大的元素。
这个问题有两种解释。
例如,如果给我们一组数字: \(10\ 15\ 20\ 35\ 14\ 35\ 10\),那么答案应该是什么?
在“第二大元素”下或者简称“次大”,可以理解为:
1) 如果我们将所有值\u200b\u200bin 非降序排列(排序)(每一个都大于或等于前一个),将会在倒数第二位的值。那么对于所考虑的一组数字,答案将是值 35;
2) 元素的值,仅大于最大值。那么答案是20。
如果数字集合中只有一个最大元素(其他的都更少),那么两种解释都是一样的,两种情况的答案都是一样的,否则答案是不同的。
考虑第一种情况(我们将在 伪代码).
为了找到答案,我们将使用两个变量:
1) maximum1 ——最大值(第一个最大值);
2) maximum2 - 第二个最大值(我们的答案)。
如果值变化的范围是已知的,那么我们取一个明显小于范围下限的数字作为初始值(例如,范围从 -1000 到 1000 -取数 -1001 )
如果取值范围未知,那么可以将前两个输入的数分别写入变量 max1 和 max2 的初始值,然后比较这些两个变量。
<前>
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 不会改变
全部
全部
节拍
尝试自己实现这个算法。
|