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

Posted

技术标签:

【中文标题】将数组的一个元素与另一个数组元素进行比较【英文标题】:Comparing one element of an array with whole another array elements 【发布时间】:2016-12-30 20:02:40 【问题描述】:

首先,我创建了 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 并且不应该显示任何值(作为变量总计),但无论我尝试什么,它总是打印大量“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();

【问题讨论】:

您的解释有点混乱,能否请您添加一些示例输入和预期输出,以便我们进行测试? 当然,我会的。 你能显示执行输出打印“错误”和结果的其余代码吗?没有进一步的上下文,这看起来很好。 @user1320881 完成! @GhostCat 我该如何解决?当我删除返回 0;它打印错误!错误!错误!错误!错误!54 它不应该说任何错误!... 【参考方案1】:

这可以通过 if-else 语句来解决。如果它较小,则执行 sum 和 break,但如果它较大,您可以设置 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

【讨论】:

我也做了同样的事情,但结果非常令人沮丧。我在上面发布了我的整个代码。奇怪的是,即使我提供的输入应该打印一个数字,它也会打印错误! 很高兴您可以为他提供有用的意见......很好的答案。 @TuğberkKaanDuman 尝试从 else 中删除 return 0,因为它将退出控制台。在用你的例子进行测试后,我得到了 4 次和 54 次的“错误”。 @RazvanAlex 我删除了返回 0,正如你所说,它给出了 ERROR!ERROR!ERROR!ERROR!ERROR!54。不应该有任何错误,它应该简单地说 54,对于我的第二个输入示例,它应该简单地说 ERROR 一次,没有任何数字或其他。我找不到我做错了什么。 首先告诉我这 3 5 的输入应该是什么 //这些分别设置了 A 和 B 的大小。 11 16 21 //这些是给A的。12 7 18 24 101 //这些是给B的。【参考方案2】:

因为这是可能的一些功课;只是一些想法让您继续前进:

您需要一些布尔 标记 变量来指示:“A 值全部大于 B 值”。

最初,那件事是真实的

在您的 if-then 情况下,您只需将其更改为 false

当你在循环之后检查它时:如果标记仍然为真;你知道所有的 As 实际上 >= 比 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;
    
  

【讨论】:

这不是家庭作业。作为一个新手,我正在学习 C++,并找到了一些练习来自学。然而......我的程序不能正常工作。让我在这里实际发布我的代码,并告诉你们有什么问题。

以上是关于将数组的一个元素与另一个数组元素进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如果存在,如何将一个数组的每个元素与另一个元素进行比较,然后打印是,否则为否

将一个数组中的数字与另一个数组 Javascript 的索引进行比较

JAVA中的数组合并问题

如何将char数组中的值与另一个char进行比较

将 NSManagedObject 数组与另一个“对象”类型 Swift 2 的数组进行比较

PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?