VasilM

Alg_test_1ab_merge

Nov 20th, 2012
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int a[1000000], b[1000000], c[2000000], m, n, k=0; //изнасям "к" извън функцията, за да мога после
  6.                                             // да го разпечатам в отговора - брой числа в новия масив.
  7. // ВАРИЯНТ А:
  8. void mergeA(){
  9.     int i,j;  // тук трия "к"
  10.     for( i=0,j=0; i<m && j<n ;k++){ // а тук трия "к=0"
  11.         if( a[i]<b[j] ) c[k]=a[i++];
  12.         else if( a[i]==b[j] ) c[k]=a[i++], j++; // този ред добавям и това е всичко,
  13.                                             // което променям в оригиналния merge, по зад.1А
  14.         else c[k]=b[j++];
  15.     }
  16.     if( i == m )
  17.       for( i=j; i<n; i++ ) c[k++]=b[i];
  18.     else
  19.       for( j=i; j<m; j++ ) c[k++]=a[j];
  20. }
  21.  
  22. // ВАРИЯНТ Б:
  23. void mergeB(){
  24.     int i,j;  // тук трия "к"
  25.     for( i=0,j=0; i<m && j<n; ){ // а тук трия "к=0", както се налага да изтрия и "к++"
  26.         if( a[i]<b[j] ) i++; // лека промяна тук
  27.         if( a[i]==b[j] ) c[k++]=a[i++], j++; // този ред добавям и това е всичко,
  28.                                             // което променям в оригиналния merge, по зад.1А
  29.         else j++; //и лека промяна тук
  30.     }
  31.     // надолу всичко трия (:
  32. }
  33.  
  34. // ТЕСТ:
  35. int main(){
  36.     setlocale(0,"");
  37.     char ab;
  38.     while( cout << "Моля, изберете вариант a/b:", cin >> ab ){ // въвежда се a или b, за да се тества единия от 2та вриянта,
  39.                                                             // с всичко друго се излиза от цикъла
  40.         if( ab == 'a' || ab == 'b' ){
  41.             cin >> m;
  42.             cin >> n;
  43.             for( int i=0; i<m; i++ ) cin >> a[i];
  44.             for( int i=0; i<n; i++ ) cin >> b[i];
  45.  
  46.             if( ab == 'a' ) mergeA();
  47.             else mergeB();
  48.            
  49.             cout << k << endl;
  50.             for( int i=0; i<k; i++ ) cout << c[i]<< " ";
  51.             cout << endl, k=0;
  52.         } else break;
  53.     }
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment