Софтуерно Инженерство
Loading...
+ Нов въпрос
Filipbg avatar Filipbg 1 Точки

02. Longest Sequence

#include <iostream>
#include <array>
using namespace std;

int main()
{
     int numbers;
     cin >> numbers;
     array<int, 100> nums = {0};
     int current = 0;
     int counter = 0;
     int mostUsed;
     for(int i = 0; i < numbers; i++)
     {
     cin >> nums[i];
     if(nums[0] == nums[1] || nums[2] == nums[3] || nums[4] == nums[5] || nums[i] == current)
     {
         mostUsed = current;
         counter++;
     }
     current = nums[i];
     }
     cout << mostUsed << " " << mostUsed << endl;
     return 0;
}

Нещо ми се губи логиката. Judge дава 20/100. Output-a в условието е грешно. Judge иска поредицата от числа да бъде изпринтирана, а не колко на брой пъти числото се повтаря, както пише в output-a на условието. Но все пак не успявам да я реша правилно. Гледам че и 4та задача е на този принцип със сравняване на числата. Ideas? :/

Тагове:
0
C++ Fundamentals
SylviaNikolova avatar SylviaNikolova 14 Точки
Best Answer

Условията, прикачени в джъдж са грешни, аз още преди да почне курса си блъсках главата с тях. Това са коректните условия: https://softuni.bg/trainings/resources/officedocument/42363/homework-problem-descriptions-c-plus-plus-fundamentals-september-2019/2402

За решението - пробвай първо да си напълниш array с for loop и чак след това, с втори отделен цикъл, в който има if проверка, да проверяваш за най-дълга поредица от еднакви елементи.. 

1
Filipbg avatar Filipbg 1 Точки

Благодаря за линка. Пробвах по начина който ми каза и пак нещо нестава. Не съм сигурен как да запаметя цялата поредица вместо самото число. Стигнах до тук и ми свършиха идеите.

#include <iostream>
#include <array>
using namespace std;

int main()
{
     int numbers;
     cin >> numbers;
     ///array<int, 100> nums = {0};
     int nums[numbers];
     int current = 0;
     int counter = 0;
     int mostUsed;
     int lastNumber;
     for(int n = 0; n < numbers; n++)
     {
         cin >> nums[n];
     }
     for(int i = 0; i < numbers; i++)
     {
         for(int z = 0; z < numbers; z++)
         {
             if(nums[i] == nums[z])
             {
                 counter++;
                 mostUsed = current;
                 lastNumber = nums[z];
             }
         }
         current = nums[i];
     }
     if(counter > 1)
     {
        cout << lastNumber;
     }
     else
     {
        cout << mostUsed << " " << mostUsed << endl;
     }
     return 0;
}

 

0
galin_kostadinov avatar galin_kostadinov 69 Точки

Здравейте! Ще отбележа следните неща:

1. По-добре да си смениш името на променливата "numbers" с име съответсващо на това, което пази - в случая броя елементи - numbersCount, arrayActualSize...

2. Първо си прочени елементите и ги напълни в масива, както ти препоръчва колежката.

3. Вариант за решение на задачата е с два вложени цикла, като в основния вземаш даденото число

int currentNumber = arr[i];

а във вложения проверяваш едно по ено всяко от числала в масива дали са равни на това число.

4. Извършваш съответните проверки в началото и вкрая на основния цикъл, за актуализация ако намериш ново число с по-голям брой и т.н.

5. Помисли и за това как да въртиш циклите, дали да намаляш или увеличаваш индексите.

6. След като намериш търсеното число, го принтираш толкова на брой пъти колкото си преброил, че се е повторило.

Поздрави!

0
ihristova11 avatar ihristova11 2 Точки

Условието на задачата не е коректно. В Judge минава, ако принтираш само самата редица. 

Това, което можеш да направиш, е да пуснеш един for цикъл и да четеш числата.

Докато го правиш, можеш да проверяваш и дали текущият прочетен елемент е равен на предходния.

	for (size_t i = 0; i < n; i++)
	{
		std::cin >> arr[i];

		if (i != 0 && arr[i - 1] == arr[i])
		{
			endIndex = i;
			++tempLen;
		}
		else
		{
			maxLen = tempLen > maxLen ? tempLen : maxLen;
			tempLen = 1;
		}

		maxLen = tempLen > maxLen ? tempLen : maxLen;
	}

Пазиш си в една променлива индекса на последния елемент (предполагам може и на първия) от редицата и дължината на конкретната редица (tempLen). След това сравняваш tempLen с максималната дължина до момента (maxLen) и ако е по-голяма, я присвояваш на maxLen.

Остава ти само да принтираш редицата в друг for като използваш дължината й и индекса на първия/последния елемент.

 

1