第一次,第一次学习编码任何东西。对不起我的无知。所以我被要求编写一个程序,从用户那里获取无限数量的数字,直到他提交我能做的非常好的数字,但我也需要打印以下三个输入的最大和,例如,用户输入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++;
}我试图构建的函数非常简单,但是我不能调用任何特定的值,例如,当我想将它们加起来,看看谁更大的时候,我不能调用任何特定的值。
int remember(int i, int n){
return n;
}*请注意,正在测试的金额是用户按确切顺序提交的数字之和11、9、8是输出,而不是20、11、9、9。
发布于 2019-12-11 11:12:39
您需要七个变量:三个是当前正在读取的“窗口”,用它检查和;三个是“最大和”三重;一个是当前的输入。
对于读取到“当前输入”变量的每个输入,将窗口向下移动一个值,并将顶部变量设置为刚刚读取的输入。
然后在窗口中取所有三个值的和,并检查它是否大于当前“最大和”三倍的和。如果是,则使“最大和”三倍等于当前窗口值。
迭代直到没有更多的输入,然后打印“最大”值。
关于三个窗口值的移动,假设您有三个名为window1、window2和window3的变量,那么您可以这样移动:
window1 = window2;
window2 = window3;
window3 = current;检查总数就像检查一样容易
if ((window1 + window2 + window3) > (biggest1 + biggest2 + biggest3))所有窗口和最大变量都需要初始化到类型的最低值(对于int,即std::numeric_limits::min())。
由于您初始化了所有的值,所以没有必要为第一个和第二个输入设置特殊情况。
在输入时进行迭代可以通过以下操作完成
while (std::cin >> current)发布于 2019-12-11 10:53:55
首先,n是未初始化的,所以在执行while (n != 1){时它是未定义的行为。所以从技术上讲,没有人能保证任何事情都能在这个范围内发挥作用。您应该初始化它,例如将其设置为0 (或者在本例中不是1的任何其他值):
int n = 0;但是,您所观察到的问题是,您的循环中有另一个int n;,它隐藏了外部n (在while条件下签入的那个)。因此,cin >> n;只会修改内部n。外部的值将保持相同的未初始化值。因此,如果该值使其进入循环,它将永远不会退出循环,因为n != 1始终是true。
删除循环中的int n;以解决问题。
发布于 2019-12-11 11:11:12
基本上,您需要的是4个变量来计算实际列表及其总和(3个用于列表,1个用于它的和)
您还需要3个变量来考虑实际的列表。
在每一次互动中,您有两件事要做:
在伪码中:
v3 = v2;
v2 = v1;
v1 = new_number;https://stackoverflow.com/questions/59284103
复制相似问题