• С++ - как решить задачку про "Болты и Гайки"?

    @kachailov Автор вопроса
    Ребята, спасибо за помощь! Таки домучал я эту задачу.

    Повилась следующая проблема. По этому алгоритму теперь меня завалили вопросом " please provide the algorithmic complexity of your algorithm in Big O notation as well"

    Понятия не имею что это такое) Может кто-то с таким сталкивался ?
    Ответ написан
    Комментировать
  • С++ - как решить задачку про "Болты и Гайки"?

    @kachailov Автор вопроса
    Пришел к этапу когда у меня есть два иднетичных массива, которые представляют собой пару ( болт + гайка ) Ex. arrayOfScrews[0] = arrayOfBolts[0], arrayOfScrews[1] = arrayOfScrews[1] и так далее.

    Теперь в моей голове сложилась картина, что нужно сравнивать между собой, но не болт со следующим болтом, а болт со следующей гайкой, она ведь по размеру следующего болта.

    Люди добрые, кто может написать такую функцию? Голова уже совсем не варит

    Вот код:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int const SIZE = 5;
    int const SIZE2 = 2;
    int const SIZE3 = 5;
    
    class BoltsAndScrews
    {
    
    public:
    	BoltsAndScrews();
    
    	void DisplayBolts();
    	void DisplayScrews();
    
    	void DisplayArrayOfPairs();
    
    	void addBolt(int);
    	void addScrew(int);
    
    	void findPairs();
    	void fillOut2Darray(int, int);
    
    	void Sort();
    
    
    private:
    	int numberOfScrews = 0;
    	int numberOfBolts = 0;
    
    	int counter1 = 0;
    	int counter2 = 0;
    	int max;
    
    	int BoltsByMax[SIZE];
    	int ScrewsByMax[SIZE];
    
    	int arrayOfBolts[SIZE];
    	int newArrayOfBolts[SIZE];
    	int arrayOfScrews[SIZE];
    	int newArrayOfScrews[SIZE];
    
    
    	int arrayOfPairs[SIZE2][SIZE3];
    
    };
    
    BoltsAndScrews::BoltsAndScrews()
    {
    
    }
    
    int main()
    {
    
    
    	BoltsAndScrews test1;
    
    	test1.addBolt(1);
    	test1.addBolt(2);
    	test1.addBolt(3);
    	test1.addBolt(4);
    	test1.addBolt(5);
    
    	test1.addScrew(5);
    	test1.addScrew(4);
    	test1.addScrew(3);
    	test1.addScrew(2);
    	test1.addScrew(1);
    
    	cout << endl;
    	test1.DisplayBolts();
    	test1.DisplayScrews();
    	cout << endl;
    	test1.findPairs();
    	cout << endl << endl;
    
    
    
    	test1.DisplayArrayOfPairs();
    	cout << endl << endl;
    	test1.Sort();
    
    	cin.get();
    	cin.get();
    	return 0;
    }
    
    void BoltsAndScrews::DisplayBolts()
    {
    	cout << "Array Of  Bolts: ";
    	for (int i = 0; i < SIZE; i++)
    	{
    		cout << arrayOfBolts[i] << " ";
    	}
    	cout << endl;
    }
    
    void BoltsAndScrews::DisplayScrews()
    {
    	cout << "Array Of Screws: ";
    	for (int i = 0; i < SIZE; i++)
    	{
    		cout << arrayOfScrews[i] << " ";
    	}
    	cout << endl;
    }
    
    
    void BoltsAndScrews::DisplayArrayOfPairs()
    {
    	cout << "Array Of Pairs: " << endl;
    
    	for (int j = 0; j < 5; j++)
    	{
    		cout << newArrayOfBolts[j] << " ";
    	}
    
    	cout << endl;
    
    	for (int i = 0; i < 5; i++)
    	{
    		cout << newArrayOfScrews[i] << " ";
    	}
    	cout << endl;
    
    
    }
    void BoltsAndScrews::addBolt(int x)
    {
    	arrayOfBolts[numberOfBolts] = x;
    	numberOfBolts++;
    }
    
    void BoltsAndScrews::addScrew(int x)
    {
    	arrayOfScrews[numberOfScrews] = x;
    	numberOfScrews++;
    }
    
    void BoltsAndScrews::fillOut2Darray(int x, int y)
    {
    
    
    	int bolt = x;
    	int screw = y;
    
    	newArrayOfBolts[counter1] = bolt;
    	newArrayOfScrews[counter2] = screw;
    
    	counter1++;
    	counter2++;
    
    	cout << "FillOutThing - " << bolt << " " << screw << endl << endl;
    
    	return;
    
    }
    
    void BoltsAndScrews::Sort()
    {
    	
    
    	int index = 0;
    	int count1 = 0, count2 = 0;;
    	
    	do
    	{
    		
    		for (int i = 0; i < SIZE; i++)
    		{
    			if (newArrayOfBolts[i] >= newArrayOfScrews[i])
    			{
    				cout << newArrayOfBolts[i] << " = " << newArrayOfScrews[i] << endl;
    				
    				BoltsByMax[count1] = newArrayOfBolts[i];
    				ScrewsByMax[count2] = newArrayOfScrews[i];
    				index = i;
    			}
    
    		}
    
    
    
    		count1++;
    		count2++;
    		index++;
    
    		cout << endl << "Bolts By Max: ";
    		for (int i = 0; i < SIZE; i++)
    		{
    			cout << BoltsByMax[i];
    		}
    
    		cout << endl << "Screws By Max: ";
    		for (int i = 0; i < SIZE; i++)
    		{
    			cout << ScrewsByMax[i];
    		}
    
    	} while (index > SIZE);
    		
    	
    		
    }
    
    void BoltsAndScrews::findPairs()
    {
    
    	for (int i = 0; i < SIZE; i++) //pick fist bolt
    	{
    		for (int j = 0; j < SIZE; j++) //pick the first scew and compaire it to bolt below. If not math, pick next screw and so on
    		{
    			if (arrayOfBolts[i] < arrayOfScrews[j])
    			{
    				cout << "Condition: Screw will go in the bolt." << " Bolt: [" << arrayOfBolts[i] << "] less than Screw: [" << arrayOfScrews[j] << "]" << endl;
    			}
    
    			if (arrayOfBolts[i] == arrayOfScrews[j])
    			{
    				cout << endl << "Condition: Screw will fit bolt exactly." << " Bolt: [" << arrayOfBolts[i] << "] same as Screw: [" << arrayOfScrews[j] << "]" << endl << endl;
    
    				cout << endl << "bolt " << arrayOfBolts[i];
    				cout << endl << "screw " << arrayOfScrews[j] << endl << endl;;
    
    				newArrayOfBolts[counter1] = arrayOfBolts[i];
    				newArrayOfScrews[counter2] = arrayOfScrews[j];
    				counter1++;
    				counter2++;
    
    				/*fillOut2Darray(arrayOfBolts[i], arrayOfScrews[j]);*/
    
    			}
    
    			if (arrayOfBolts[i] > arrayOfScrews[j])
    			{
    				cout << "Condition: Screw will be loose." << " Bolt: [" << arrayOfBolts[i] << "] bigger than Screw: [" << arrayOfScrews[j] << "]" << endl;
    			}
    
    
    		} // Screw
    
    	} // bolt
    
    }


    Собственно интересующая меня функиция - Sort()
    Ответ написан
    Комментировать