Loading...
Filipbg avatar Filipbg 26 Точки

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 20 Точки
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 26 Точки

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

#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 166 Точки

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

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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.