将数组的一个元素与另一个数组元素进行比较

时间:2016-12-30 20:02:40

标签: c++ arrays loops

首先,我创建了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();
}

2 个答案:

答案 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;
        }
    }
}

如果你仍然无法弄明白,以下是解决方案;)

Spoiler solution

答案 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;
    }
  }
}