Najprostszy chyba kod dla tego zadania:
using namespace std;
// Liczba sekund w 24h = 86 400
unsigned long int ZestawyTestowe;
unsigned int Doba = 86400;int main()
{
cin >> ZestawyTestowe;
long int Tablica[ZestawyTestowe];
for (int i=0; i<ZestawyTestowe; i++)
{
unsigned long int IleZje=0;
//deklaracja obzartuchow
unsigned long int Obzartuchy;
//deklaracja ile ciastek znajduje sie w pudelku
unsigned int CiastkaWPudelku;
//wprowadzamy ilosc obzartuchow i ile ciastek w pudelku
cin >> Obzartuchy >> CiastkaWPudelku;
for (int j=0; j<Obzartuchy; j++)
{
//deklaracja czasu
float Czas;
cin >> Czas;
IleZje+= floor(Doba/Czas);
}unsigned long int LiczbaPudelek = IleZje / CiastkaWPudelku; if (IleZje % CiastkaWPudelku !=0) { LiczbaPudelek++; } Tablica[i]=LiczbaPudelek; } for (int i=0; i<ZestawyTestowe; i++) { cout << Tablica[i] <<endl; } return 0;
}
A tu z funkcja:
using namespace std;
// Liczba sekund w 24h = 86 400
void LiczbaPudelek (long int ZestawyTestowe, long int *Tab)
{
unsigned int Doba = 86400;
for (int i=0; i<ZestawyTestowe; i++)
{
unsigned long int IleZje=0;
//deklaracja obzartuchow
unsigned long int Obzartuchy;
//deklaracja ile ciastek znajduje sie w pudelku
unsigned int CiastkaWPudelku;
//wprowadzamy ilosc obzartuchow i ile ciastek w pudelku
cin >> Obzartuchy >> CiastkaWPudelku;
for (int j=0; j<Obzartuchy; j++)
{
//deklaracja czasu
float Czas;
cin >> Czas;
IleZje+= floor(Doba/Czas);
}unsigned long int LiczbaPudelek = IleZje / CiastkaWPudelku; if (IleZje % CiastkaWPudelku !=0) { LiczbaPudelek++; } Tab[i]=LiczbaPudelek;
}
}int main()
{
unsigned long int ZestawyTestowe;
cin >> ZestawyTestowe;
long int Tablica[ZestawyTestowe];
LiczbaPudelek(ZestawyTestowe, Tablica);
for (int i=0; i<ZestawyTestowe; i++)
{
cout << Tablica[i] <<endl;
}return 0;
}
Witam,
Jestem nowy na tym serwisie i jeszcze nie wiem jak konkretnie dziala tutaj ten sedzia.
Do zadania obzartuchy przeslalem swoja odpowiedz natomiast sedzia wyrzucil blad sigsegv tzn blad o naruszeniu ochrony pamieci ale przegladajac pare razy kod nigdzie nie widze mozliwosci tego bledu, w code::blocks oczywiscie wszystko dziala.
Moge prosic o pomoc czy jednak mam cos zle w kodzie czy raczej wybieram zle jezyk z roznych dostepnych c++
#include
#include
using namespace std;
int main()
{
int n,test,sumaa,w_pudelku,sekundy[3],kupicc,ciastka[3] ;
float kupic;
cin>> test;
for(int x=0;x<test;x++)
{
cin>>n;
cin>> w_pudelku;
for(int i=0;i<n;i++)
{
cin>>sekundy[i];
ciastka[i] = 86400 / sekundy[i];
ciastka[i] = floor(ciastka[i]);
sumaa += ciastka[i];
if(i==n-1)
{
kupic = sumaa/ w_pudelku;
kupicc = ceil( kupic);
cout<< kupicc<< endl;
}
}
sumaa=0;
}
return 0;
}
po pierwsze jest post dla nowych na forum w gdzie tłumaczy sie podstawowe rzeczy, między innymi jak umieszczać program w poście. A jeszcze lepiej dawać linka z Ideone.com1
Po drugie jesteś pewny że tylko 3 ciastka czy ciastkożerców może wystąpić ? Bo tyle przyszykowałeś miejsca…
(1 ≤ N ≤ 10.000, 1 ≤ M ≤ 1.000.000.000)
Coś mi się wydaje, że w zadaniu mogą wystąpić “troszkę” większe ilości obżartuchów niż 20. Jeśli chcesz, możesz dynamicznie alokować pamięć na tablicę albo użyć kontenera std::vector
. Ewentualnie po prostu zrobić statyczną tablicę z 10000 miejscami, w tym zadaniu jeszcze to przejdzie. I nie wyskakuje ci błąd kompilacji, tylko SIGSEGV, co jest spowodowane użyciem pamięci poza tablicą (bo masz duuużo mniejszą niż może być maksymalnie obżartuchów).
Wiem już co źle było z tym - zasugerowałem się innym zadaniem (prędkość średnia) i poleciałem tym tokiem myślenia… Kodowanie po nocce w pracy nie wyszło na dobre choć doba/(czas obż nr 1) + doba/(czas obż nr 2) na kartce sobie dobrze rozwiązałem
jednak sędzia dalej nie chce mi go przepuścić pomimo, że wyniki są dobre