从用户那里获得无限量的输入而不是打印最大的 3 ,而不使用数组
getting infinte amount of inputs from the user than printing the biggest 3 , without using arrays
第一次,第一次学习编写任何代码。对不起我的无知。
所以我被要求编写一个程序,从用户那里获取无限数量的数字,直到他提交我设法做得很好的数字,但我还需要打印以下三个输入的最大总和,例如,用户输入 4,20,2,4,11,9,8,1
程序应该打印 11,9,8
因为这 3 个的总和大于所有其他 3 个。
我必须告诉你我不能使用数组,我知道它是个笨蛋,但我知道没有数组也是可以的。
我试图构建一个函数,它试图像一个数组一样工作,但我真的不能给她回电话,因为它是一个双变量函数,其中一个是输入,我显然不知道.已经在这个问题上工作了 5 个小时了,我想请教你的智慧
cout << " enter numbers as long as you wish" << endl;
cout << "when you wish to stop enter the number 1" << endl;
int n;
int sum;
int i = 1;
while (n != 1) {
cin >> n;
remember(i, n);
if (n == 1) {
cout << "you choosed to stop " << endl;
break;
}
i++;
}
我尝试构建的函数非常简单,但我无法调用任何特定值,例如 remember(1, n)
,当我想将它们相加并查看谁更大时。
int remember(int i, int n){
return n;
}
*** 请注意,正在测试的总和是按照用户提交的确切顺序排列的数字总和,因此 11、9、8 是输出,而不是 20、11、9
首先,n
未初始化,因此当您执行 while (n != 1){
时它是未定义的行为。所以从技术上讲,不能保证任何事情都可以通过。您应该初始化它,例如将其设置为 0
(或任何其他不是 1
的值,在这种情况下):
int n = 0;
但是您观察到的问题是因为您的循环中有另一个 int n;
,它遮蔽了外部 n
(在 while
条件下检查的那个)。所以 cin >> n;
只会修改内部的 n
。外部的将保持相同的未初始化值。因此,如果该值使其进入循环,它将永远不会退出循环,因为 n != 1
始终是 true
.
把循环里面的int n;
去掉就解决了
基本上,您需要 4 个变量来计算实际列表及其总和(3 个用于列表,1 个用于总和)
您还需要 3 个变量来计算实际列表。
在每次互动中,您有两件事要做:
- 将实际列表的总和与存储的列表进行比较。如果实际列表的总和大于存储的总和,则将其实际化
- 对于每个新数字,轮换占实际列表的变量。
在伪代码中:
v3 = v2;
v2 = v1;
v1 = new_number;
您需要七个变量:三个是您当前正在阅读的 "window",您可以用它来检查总和;三是 "biggest sum" 三元组;还有一个是当前输入。
对于您读入 "current input" 变量的每个输入,您 将 window 向下移动一个值并将顶部变量设置为刚刚读取的输入.
然后你取 window 中所有三个值的总和,并检查它是否大于当前 "biggest sum" 三元组的总和。如果是,则使 "biggest sum" 三倍等于当前 window 值。
迭代直到没有更多输入,然后打印 "biggest" 个值。
关于三个 window 值的 shifting,假设您有三个变量,分别命名为 window1
、window2
和 window3
那么你可以这样移动:
window1 = window2;
window2 = window3;
window3 = current;
检查总和就像
一样简单
if ((window1 + window2 + window3) > (biggest1 + biggest2 + biggest3))
所有 window 和最大的变量都需要初始化为该类型的可能的最低值(对于 int
,即 std::numeric_limits<int>::min()
)。
由于您初始化了所有值,因此不需要为第一个和第二个输入设置特殊情况。
在有输入时进行迭代可以通过
来完成
while (std::cin >> current)
第一次,第一次学习编写任何代码。对不起我的无知。
所以我被要求编写一个程序,从用户那里获取无限数量的数字,直到他提交我设法做得很好的数字,但我还需要打印以下三个输入的最大总和,例如,用户输入 4,20,2,4,11,9,8,1
程序应该打印 11,9,8
因为这 3 个的总和大于所有其他 3 个。
我必须告诉你我不能使用数组,我知道它是个笨蛋,但我知道没有数组也是可以的。
我试图构建一个函数,它试图像一个数组一样工作,但我真的不能给她回电话,因为它是一个双变量函数,其中一个是输入,我显然不知道.已经在这个问题上工作了 5 个小时了,我想请教你的智慧
cout << " enter numbers as long as you wish" << endl;
cout << "when you wish to stop enter the number 1" << endl;
int n;
int sum;
int i = 1;
while (n != 1) {
cin >> n;
remember(i, n);
if (n == 1) {
cout << "you choosed to stop " << endl;
break;
}
i++;
}
我尝试构建的函数非常简单,但我无法调用任何特定值,例如 remember(1, n)
,当我想将它们相加并查看谁更大时。
int remember(int i, int n){
return n;
}
*** 请注意,正在测试的总和是按照用户提交的确切顺序排列的数字总和,因此 11、9、8 是输出,而不是 20、11、9
首先,n
未初始化,因此当您执行 while (n != 1){
时它是未定义的行为。所以从技术上讲,不能保证任何事情都可以通过。您应该初始化它,例如将其设置为 0
(或任何其他不是 1
的值,在这种情况下):
int n = 0;
但是您观察到的问题是因为您的循环中有另一个 int n;
,它遮蔽了外部 n
(在 while
条件下检查的那个)。所以 cin >> n;
只会修改内部的 n
。外部的将保持相同的未初始化值。因此,如果该值使其进入循环,它将永远不会退出循环,因为 n != 1
始终是 true
.
把循环里面的int n;
去掉就解决了
基本上,您需要 4 个变量来计算实际列表及其总和(3 个用于列表,1 个用于总和)
您还需要 3 个变量来计算实际列表。
在每次互动中,您有两件事要做:
- 将实际列表的总和与存储的列表进行比较。如果实际列表的总和大于存储的总和,则将其实际化
- 对于每个新数字,轮换占实际列表的变量。
在伪代码中:
v3 = v2;
v2 = v1;
v1 = new_number;
您需要七个变量:三个是您当前正在阅读的 "window",您可以用它来检查总和;三是 "biggest sum" 三元组;还有一个是当前输入。
对于您读入 "current input" 变量的每个输入,您 将 window 向下移动一个值并将顶部变量设置为刚刚读取的输入.
然后你取 window 中所有三个值的总和,并检查它是否大于当前 "biggest sum" 三元组的总和。如果是,则使 "biggest sum" 三倍等于当前 window 值。
迭代直到没有更多输入,然后打印 "biggest" 个值。
关于三个 window 值的 shifting,假设您有三个变量,分别命名为 window1
、window2
和 window3
那么你可以这样移动:
window1 = window2;
window2 = window3;
window3 = current;
检查总和就像
一样简单if ((window1 + window2 + window3) > (biggest1 + biggest2 + biggest3))
所有 window 和最大的变量都需要初始化为该类型的可能的最低值(对于 int
,即 std::numeric_limits<int>::min()
)。
由于您初始化了所有值,因此不需要为第一个和第二个输入设置特殊情况。
在有输入时进行迭代可以通过
来完成while (std::cin >> current)