• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z zadaniem, prawdopodobny błąd w treści lub w testach sprawdzających.

0 głosów
461 wizyt
pytanie zadane 23 lutego 2022 w C i C++ przez polandonion Dyskutant (7,680 p.)

Witam, chciałbym poprosić o pomoc w zadaniu; zrobiłem zadanie domowe, lecz robot sprawdzający daje tylko 30%. Mam prośbę do osób, które znają się na programowaniu dosyć długo, algorytmikę znają bardzo dobrze, może ja robię jakiś błąd?

Treść zadania:

Niżej zamieszczam kod źródłowy mojej pracy:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n; cin>>n;
	int *tab=new int [n];
	for(int i=0; i<n; i++)
		cin>>tab[i];
	sort(tab,tab+n);
	int a=tab[0],b=tab[1],c=tab[2];
	int d=tab[n-3],e=tab[n-2],f=tab[n-1];
	cout<<max(a*b*f,d*e*f);
	delete [] tab;
}

W razie jakby ktoś nie rozumiał linii wypisującej wynik, podpowiem, iż gdy posortuję tablicę, to na indeksach początkowych mogą znaleźć się liczby ujemne, a co za tym idzie wymnożenie dwóch największych liczb ujemnych liczb oraz jednej największej dodatniej z całego zbioru uczyni iloczyn największym. Kiedy nie mamy liczb ujemnych wymnażamy 3 ostatnie (największe po posortowaniu) liczby.

Na końcu daję Wam to, co robot sprawdzający wypisuje po otrzymaniu mojego kodu:

1 odpowiedź

0 głosów
odpowiedź 23 lutego 2022 przez Whistleroosh Maniak (57,400 p.)

Sprawdź co Twój program wypisuje dla testu

3
10000 10000 10000

i zastanów się dlaczego tak się dzieje

komentarz 23 lutego 2022 przez polandonion Dyskutant (7,680 p.)
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n; cin>>n;
	int *tab=new int [n];
	for(int i=0; i<n; i++)
		cin>>tab[i];
	sort(tab,tab+n);
	int a=tab[0],b=tab[1],c=tab[2];
	int d=tab[n-3],e=tab[n-2],f=tab[n-1];
	unsigned long long wy1=a*b*f,wy2=d*e*f;
	cout<<(wy1>=wy2 ? wy1 : wy2);
	//ewentualnie cout<<max(wy1,wy2);
	delete [] tab;
}

dla testu 3 10000 10000 10000

wypisuje mi największą wartość zakresu unsigned long long:

18446744072982171648

komentarz 23 lutego 2022 przez Whistleroosh Maniak (57,400 p.)
To chyba nie do końca jest maks unsigend long longa. Ale jak myslisz dlaczego w tym poprzednim programie wynik wychodzi ujemny?
komentarz 23 lutego 2022 przez polandonion Dyskutant (7,680 p.)
wartości tablicy są od -10^4 do 10^4, czyli tablica w int jest ok, zastanawiam sie tylko nad tymi zmiennymi od a do f czy nie powinny byc w unsigned long long u
komentarz 23 lutego 2022 przez Whistleroosh Maniak (57,400 p.)
Dobrze myślisz, bo teraz zmienne a...f są intami czyli iloczyn a*b*f też jest intem, a wartość 10^12 nie zmiesci się w int

Podobne pytania

0 głosów
1 odpowiedź 180 wizyt
pytanie zadane 29 października 2016 w C i C++ przez Piotr Ponikwia Początkujący (330 p.)
0 głosów
0 odpowiedzi 360 wizyt
pytanie zadane 24 lipca 2020 w C i C++ przez Jakub Chomicz 1 Użytkownik (840 p.)
0 głosów
1 odpowiedź 305 wizyt
pytanie zadane 29 września 2019 w C i C++ przez Jakub Chomicz 1 Użytkownik (840 p.)

93,604 zapytań

142,527 odpowiedzi

322,993 komentarzy

63,089 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...