Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Массивы с пересечением множеств


Автор: Leno 4.1.2013, 15:05
Помогите с программой на С++, у самой никак не получается. Даны значения двух целочисленных массивов x и y размером n. Рассматривая массивы как конечные множество целых чисел, построить массив z размером не более 2n, где z = x пересечение y (пересечение множеств). Нашла похожую программу, но там симметрическа разность множеств. Помогите пожалуйста.
Код

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
void main()
{
    const int max_size = 10, max_size_2 = 20; 
    int n,i = 0;
    int X[max_size];
    int Y[max_size];
    int Z[max_size_2];
 do
 {
    cout << "input n: " << endl;
    cin >> n;
 }
 while (n<1);
 
    cout << "elements: " << endl;
    
    cout << "X={";
    for(i = 0; i < n; i++)
    {
        X[i] =0 + rand() % 10; //заполнение массива X случайными целыми числами от 0 до 10
        cout<<" "<<X[i] <<",";
    }
    cout << "}";
    cout << endl;
 
    cout << "Y={";
    for(i = 0; i < n; i++)
    {
        Y[i] =0 + rand() % 10; //заполнение массива Y случайными целыми числами от 0 до 10
        cout<<" "<<Y[i] <<",";
    }
    cout << "}";
    cout << endl;
 
 
    //блок сортировки массивов X и Y
    bool f = true,f2 = true;
    int iz = 0;
 
    for(i = 0;i < max_size;i++)
    {
        f = true;
        f2 = f;
 
        for(int  j = 0;(j < max_size) && f;j++)
        {
            if(X[i] == Y[j]) f = false;
            if(Y[i] == X[j]) f2 = false;
    
        }
 
        if(f)
        {
            Z[iz] = X[i];  //запись в массив Z
            iz++;
        }
        if(f2)
        {
            Z[iz] = Y[i];  //запись в массив Z
            iz++;
        }
    }
 
    cout << "Z={";
    for(int i = 0;i < iz;i++)
    {
        cout<<" "<<Z[i] <<",";
    }
        cout << "}";
        cout << endl;
system("pause");        
return;
}

Автор: feodorv 4.1.2013, 16:24
Думаю, вместо цикла
Цитата(Leno @  4.1.2013,  16:05 Найти цитируемый пост)
    for(i = 0;i < max_size;i++)
    {
        f = true;
        f2 = f;
 
        for(int  j = 0;(j < max_size) && f;j++)
        {
            if(X[i] == Y[j]) f = false;
            if(Y[i] == X[j]) f2 = false;
    
        }
 
        if(f)
        {
            Z[iz] = X[i];  //запись в массив Z
            iz++;
        }
        if(f2)
        {
            Z[iz] = Y[i];  //запись в массив Z
            iz++;
        }
    }


сделать такой цикл
Код
for( i = 0; i < max_size; i++)
{
  for( int  j = 0; j < max_size; j++) 
    if( X[i] == Y[j] ) Z[iz++] = X[i];
}


Правда остаётся вопрос об одинаковых числах в одном и том же массиве. Вот чему должно быть равно пересечение таких множеств:
Код

int X[3] = { 1, 1, 1};
int Y[3] = { 1, 1, 1};


Предлагаемый код породит следующее пересечение:
Код

int Z[6] = { 1, 1, 1, 1, 1, 1};

Это правильно???

Автор: Leno 4.1.2013, 19:26
Спасибо ^_^

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)