Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Se da un N si apoi N multimi de forma
- primu numar de pe fiecare linie este numarul de elemente din
- multime, se cere, sa se afiseze care sunt multimi si care nu sunt
- si sa se afiseze reuniunea si intersectia a 2 multimi consecutive
- input
- 5
- 4 1 2 3 5
- 4 4 6 7 5
- 5 6 4 9 8 5
- 2 1 2
- 3 5 9 8
- */
- #include <stdio.h>
- int citire(FILE *f, int n, int x[40][40])
- {
- int i, j;
- fscanf(f, "%d", &n);
- for(i = 0; i < n; i++)
- {
- fscanf(f, "%d", &x[i][0]);
- for(j = 1; j <= x[i][0]; j++)
- fscanf(f, "%d", &x[i][j]);
- }
- return n;
- }
- void verificare(FILE *g, int n, int x[40][40])
- {
- int i, j, k;
- for(i = 0; i < n; i++)
- {
- int ok = 0;
- for(j = 1; j < x[i][0]; j++)
- for(k = j + 1; k <= x[i][0]; k++)
- if(x[i][j] == x[i][k])
- {
- ok = 1;
- }
- if(ok == 1)
- fprintf(g, "%d nu este multime\n", i + 1);
- else
- fprintf(g, "%d este multime\n", i + 1);
- }
- }
- void intersectie(FILE *g, int n, int x[40][40])
- {
- int i, j, k;
- for(i = 0; i < n - 1; i++)
- {
- fprintf(g, "Multimile %d %d au intesectia ", i + 1, i + 2);
- for(j = 1; j <= x[i][0]; j++)
- {
- for(k = 1; k <= x[i + 1][0]; k++)
- if(x[i][j] == x[i + 1][k])
- {
- fprintf(g, "%d ", x[i][j]);
- }
- }
- fprintf(g, "\n");
- }
- }
- void reuniune(FILE *g, int n, int x[40][40])
- {
- int i, j, k;
- for(i = 0; i < n - 1; i++)
- {
- int y[100004] = {0};
- fprintf(g, "Multimile %d %d au reuniunea ", i + 1, i + 2);
- for(j = 1; j <= x[i][0]; j++)
- {
- y[x[i][j]]++;
- }
- for(j = 1; j <= x[i + 1][0]; j++)
- {
- y[x[i + 1][j]]++;
- }
- for(k = 0; k <= 100003; k++)
- if(y[k] != 0)
- fprintf(g, "%d ", k);
- fprintf(g, "\n");
- }
- }
- int main()
- {
- FILE *f, *g;
- f = fopen("in.txt", "r");
- g = fopen("on.txt", "w");
- int n, x[40][40];
- n = citire(f, n, x);
- verificare(g, n, x);
- fprintf(g, "\n\n\n");
- intersectie(g, n, x);
- fprintf(g, "\n\n\n");
- reuniune(g, n, x);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement