Ответы пользователя по тегу C++
  • Найти медиану двух отсортированных массивов?

    dart_kinselok
    @dart_kinselok Автор вопроса
    Правильный вопрос содержит 50% искомого ответа...
    Благодарен всем тем, кто помог, помогал, или пытался помочь. Из кучи решений собрал франкенштейна из разных кусков тел, и, в связке с полным условием, код выглядит следующим образом:

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    void bubble_sort(int *a, int array_size) {
    	for (int i = 0; i < array_size - 1; i++) {
    		for (int j = 0; j < array_size - i - 1; j++) {
    			if (a[j] > a[j+1]) {
    				int save;
    				save = a[j];
    				a[j] = a[j + 1];
    				a[j + 1] = save;
    			}
    		}
    	}
    }
    
    int main() {
    	srand(time(0));
    
    	int a_s;
    	int b_s;
    	int answer;
    
    	cout << "Enter the size of the first array: ";
    	cin >> a_s;
    	cout << endl;
    	cout << "Thx. Now, the second array: ";
    	cin >> b_s;
    	
    	if (((a_s + b_s) % 2) == 0) {
    		b_s = b_s + 1;
    		cout << "First and second sizes are even. We'll add 1 point to size of second array. ";
    	}
    
    	cout << endl;
    	cout << "===================================";
    	cout << endl;
    
    	cout << "Random values or input from keyboard? (1/2, yeap, i'm very lazy to use strcmp() :) ";
    	cin >> answer;
    
    	cout << "===================================";
    	cout << endl;
    
    	int *a = new int[a_s];
    	int *b = new int[b_s];
    
    	cout << "All values will be automatically sorted in ASC order!" << endl;
    	cout << "Warning! Don't type the same numbres! The middle values also will be counted!!" << endl;
    	cout << endl;
    
    	if (answer == 1) {
    		for (int i = 0; i < a_s; i++) {
    			a[i] = rand() % 10 + 1;
    		}
    		for (int i = 0; i < b_s; i++){
    			b[i] = rand() % 16 + 1;
    		}
    	}
    	else if(answer == 2) {
    		for (int i = 0; i < a_s; i++) {
    			cout << "a[" << i + 1 << "]: ";
    			cin >> a[i];
    		}
    		for (int i = 0; i < b_s; i++) {
    			cout << "b[" << i + 1 << "]: ";
    			cin >> b[i];
    		}
    	}
    
    	bubble_sort(a, a_s);
    	bubble_sort(b, b_s);

    Тут самым коротким решением оказалось решение глубокоуважаемого @abyrkov
    int	counter1 = 0,
    		counter2 = 0,
    		counter3 = 0;
    
    	for (int counter = 0; counter < (a_s + b_s) / 2; counter++)
    	{
    		if (a[counter1] <= b[counter2]) {
    			counter3 = a[counter1];
    			counter1++;
    		}
    		else {
    			counter3 = b[counter2];
    			counter2++;
    		}
    	}
    	cout << counter3;
    	system("pause");
    	return 0;
    }
    Ответ написан