2401_83511423 2024-05-23 09:47 采纳率: 0%
浏览 1

为什么c++数组求并集后掉了两个数,并且输出是一串?


#include<iostream>
using namespace std;
int main(void)
{    
int m,n, a[10], b[10],c[20], * p, i, j, pos = 1, * q, * d;    
cout << "请输入数组a的个数m:";    
cin >> m;
cout << "请输入数组a的" << m << "个数:" << endl;    
for (i = 0; i < m; i++)        
cin >> a[i];    
cout << "请输入数组b的个数n:";    
cin >> n;    
cout << "请输入数组b的" << n << "个数:" << endl;    
for (i = 0; i < m; i++)
        cin >> b[i];    
p = a;    
for (i = 0; i < m; i++)
    c[i] = *(p + i);    q = b;    
for (i = 0; i < n; i++)    
    c[i + m] = *(q + i);    
d = c;    
for (i=1;i<m+n;i++)
{        
for (j=0;j<pos;j++)        
{            
if (*(d + i) == *(d + j))                    
break;        }        
if (j == pos)        
{        
    *(d + pos) = *(d + i);        
    pos++;        
}    
}    
cout << "并集为:" << endl;    
for (i = 0; i < pos; i++)    
    cout << *(d + i) << " ";    
cout << endl;
    return 0;
}

img

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-05-23 09:47
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    基于您提供的代码和问题描述,以下是具体的解决步骤:

    1. 修正数组赋值: 在代码中,数组b的赋值循环应该使用n而不是m。这是第一个需要修正的地方。

      // 错误
      for (i = 0; i < m; i++)
          cin >> b[i];
      
      // 正确
      for (i = 0; i < n; i++)
          cin >> b[i];
      
    2. 修正数组c的大小: 数组c的大小应该至少为m + n,以确保有足够的空间存储两个数组的元素。在代码中,数组c的大小被固定为20,这可能足够,但需要确认mn的值是否超过这个限制。

    3. 修正并集逻辑: 代码中的并集逻辑可能存在问题,特别是当数组ab中有重复元素时。需要确保去重逻辑正确执行。

    4. 修正输出格式: 输出部分应该在每个元素后添加一个空格,并在最后一个元素后添加换行符,以确保输出格式正确。

    5. 添加输入检查: 添加输入检查以确保用户输入的mn的值在数组ab的大小范围内。

    6. 测试代码: 在进行修改后,需要对代码进行测试,以确保并集正确计算且输出格式正确。

    以下是修改后的代码示例:

    #include<iostream>
    using namespace std;
    
    int main(void) {
        int m, n, a[10], b[10], c[20], i, j, pos = 0;
        cout << "请输入数组a的个数m:";
        cin >> m;
        cout << "请输入数组a的" << m << "个数:" << endl;
        for (i = 0; i < m; i++)
            cin >> a[i];
        
        cout << "请输入数组b的个数n:";
        cin >> n;
        cout << "请输入数组b的" << n << "个数:" << endl;
        for (i = 0; i < n; i++) // 修正这里
            cin >> b[i];
        
        for (i = 0; i < m; i++)
            c[pos++] = a[i];
        for (i = 0; i < n; i++)
            c[pos++] = b[i];
        
        for (i = 1; i < pos; i++) {
            for (j = 0; j < i; j++) {
                if (c[i] == c[j])
                    break;
            }
            if (j == i) {
                if (i != pos - 1) {
                    c[pos++] = c[i];
                } else {
                    // 已经是最后一个元素,直接输出
                    cout << c[i];
                }
            }
        }
        
        cout << "并集为:";
        for (i = 0; i < pos - 1; i++) // 修正输出格式
            cout << c[i] << " ";
        cout << endl;
        return 0;
    }
    

    请注意,这段代码只是一个示例,可能需要根据实际情况进一步调整。您需要运行并测试代码,以确保它按预期工作。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月23日