首先,我创建了2个数组。称他们为A[]
和B[]
。
数组A包含元素A = { 11, 16, 21 }
数组B包含元素B = { 12, 7, 18, 24, 101 }
我做了一个循环。比较两者。
for (int i = 0; i<Acount; ++i) {
for (int j = 0; j < Bcount; ++j) {
if (A[i] <= B[j]) {
total = B[j] + total;
break;
}
}
}
这个比较它们,如果A[]
元素小于任何B[]
元素,循环停止并将B的值与该点的总和相加并停止比较。
现在,如果A的每个元素都大于B,例如:
A = { 11 }
和B = { 3, 5 }
它应该说ERROR并且不应该显示任何值(作为变量总数),但无论我尝试过它总是打印大量的“错误”文本或值,或者甚至同时打印两者。
我该怎么办?
编辑:澄清;
示例输入:
3 5 //these sets the sizes of A and B, respectively.
11
16
21 //these are for A.
12
7
18
24
101 //these are for B.
该计划应该: 嘿,这很酷11。让我比较A中的11和来自B的12,7,18,24,101,看看有没有比我大的东西。有12个!真好。让我们加总12。现在,我有16,让我们对12,7,18,24,101做同样的比较。 12小于我......所以我应该跳过它。 7以及...... 18比我大!让我们总共加18!现在21 ...相同的比较相同的东西。有24个。加起来并打印结果。
现在,还有另一个示例输入:
1 2 //these sets the size of A and B, respectively.
10 // this is for A
3
5 // these are for B
代码应该做同样的事情,但这次...... 我有10个,让我们看看是否有什么比我大。 10大于3吗?没有? 5大于10吗?显然不是。所以...没有比我更大的东西......我应该打印一个错误。
我希望我更简单。 欢呼声。
编辑2:这是我的完整代码。使用我在上面提供的示例输入自己尝试并告诉我出了什么问题。第一个输入应该打印一个实际的数字结果,但打印ERROR为例。
#include <iostream>
#include <conio.h>
using namespace std;
int main() {
int amountA, amountB, i = 0 ,j = 0, total = 0;
int A[20000];
int B[20000];
cin >> amountA >> amountB;
for (i = 0; i < amountA; i++) {
cin >> A[i];
}
for (j = 0; j < amountB; j++) {
cin >> B[j];
}
for (int i = 0; i < amountA; ++i) {
for (int j = 0; j < amountB; ++j) {
if (A[i] <= B[j]) {
total = B[j] + total;
break;
} else {
cout << "ERROR!" << endl;
return 0;
}
}
}
cout << total << endl;
_getch();
}
答案 0 :(得分:1)
这可以通过if-else语句修复。如果它较小则执行总和和中断,但如果它更大,则可以设置其他条件。下面是一个例子;)
for (int i = 0; i<Acount; ++i)
{
for (int j = 0; j < Bcount; ++j)
{
if (A[i] <= B[j])
{
total = B[j] + total;
break;
} else {
std::cout<<"Error"<<std::endl;
}
}
}
如果你仍然无法弄明白,以下是解决方案;)
答案 1 :(得分:0)
因为这可能是一些功课;只是为了让你前进的一些想法:
您需要一些布尔标记变量,表示:“值全部大于B值”。
最初,那件事是真的。
在if-then案例中,您只需将其更改为 false 。
当你在循环之后检查它时:如果标记仍然是真的;你知道所有的As实际上是&gt; =而不是Bs。如果标记为假,则至少有一个A更小......
您的当前代码的问题很简单:您的else块中有 return 语句。这意味着:当您遇到这种情况时,您就会结束整个计划!
如上所述;你需要一个标记:
bool hitError = false;
for (int i = 0; i< amountA; ++i)
{
if (hitError) {
break;
}
for (int j = 0; j < amountB; ++j)
{
if (A[i] <= B[j])
{
total = B[j] + total;
break;
}
else
{
cout << "ERROR!" << endl;
hitError = true;
break;
}
}
}