02. Longest Sequence
Здравейте. Може ли малко помощ със задачата. С входа и изхода всичко е наред т.е. при задаване на входа от условието изходът излиза също по условие, но judge не ми дава пълният брой точки. Пробвах същата задача с вложен цикъл(за обхождане на масива), също така и кода да бъде само в main функцията.
#include <iostream>
#include <climits>
#include <array>
using namespace std;
void longestSequence(int arr[],int n){
int num1=0;
int num2=0;
int counter=1;
int minCounter=INT_MIN;
int number=0;
for(int m=1;m<n;m++){
num1=arr[m-1];
num2=arr[m];
if(num1==num2){
counter++;
}else{
counter=1;
}
if(minCounter<=counter){
number=num1;
minCounter=counter;
}
}
if(minCounter<=1){
cout<<num2<<endl;
}else if(minCounter>1){
for(int k=0;k<minCounter;k++){
cout<<number<<" ";
}
}
}
int main(){
int length;
cin>>length;
int n=length;
int arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}
longestSequence(arr,n);
return 0;
}
Добре, аз имам доста подобна логика на колегата от първия пост с тази разлика, че в main-а съм вкарал логика за случаи, в които ми се опитат да ми подадат 0 или отрицателно число. Имам и споменатата от теб проверка за масив с дължина единица. Въпреки всичко това нещо в Judge дава 80/100. Гледах го толкова много, че зациклих жестоко, но за съжаление не виждам какво изпускам. Може би някой граничен случай или нещо в логиката което ми бяга. Та...имам нужда от помощ. Благодаря предварително!
Привет! На твоето решение добавих спомената провекра и ми дава 100/100.
#include <iostream>
#include <array>
void longestSequence(int array[], int length) {
int number1 = 0;
int number2 = 0;
int counter = 1;
int minCounter = INT_MIN;
int number = 0;
if (length == 1) {
number = array[0];
number2 = array[0];
}
for (int i = 1; i < length; i++){
number1 = array[i - 1];
number2 = array [i];
if (number1 == number2){
counter++;
} else {
counter = 1;
}
if (minCounter <= counter) {
number = number1;
minCounter = counter;
}
if (length == 1) {
number = array[0];
number2 = array[0];
}
}
if (minCounter <= 1) {
std::cout << number2 << std::endl;
} else if (minCounter > 1) {
for (int i = 0; i < minCounter; i++) {
std::cout << number << " ";
}
}
}
int main() {
int length = 0;
std::cin >> length;
if (length == 0) {
std::cout << "0";
return 0;
}
if (length > 0) {
int array[length] = {0};
for (int i = 0; i < length; i++) {
std::cin >> array[i];
}
longestSequence(array, length);
} else {
return 0;
}
return 0;
}
Поздрави!
Оле Боже....сега видях къде ми е грешката. Аз съм сложил проверката в тялото на FOR-а. Просто ми е била грешно подредена логиката ама така е като зацикли човек :) Благодаря ти много!
Благодаря.