Ja mam spory problem. Ten program jest zdecydowanie najbardziej skomplikowanym programem, jaki do tej pory napisałem (dopiero zaczynam programować), więc byłbym bardzo szczęśliwy, jeżeliby mi przeszło jego rozwiązanie. W domu wszystko mi działa bez problemu (używam Dev C++), jednak kiedy wysyłam rozwiązanie na serwer, to wyskakuje mi błąd SIGFPE.
Czy ktoś mógłby mi wskazać błąd w moim programie?
#include <iostream>
using namespace std;
int nwd(int a, int b)
{
while(a>0 && b>0)
{
a=a%b;
if(a==0)
{
break;
}
b=b%a;
}
return a+b;
}
int nww(int a, int b)
{
return a*b/nwd(a, b);
}
int main()
{
int n, a, i, b;
cin>>n;
unsigned long long int nwww[n];
b=n;
while(b)
{
cin>>a;
unsigned long long int tab[a];
i=a;
while(i)
{
cin>>tab[i-1];
i--;
}
while(a>1)
{
tab[a-2]=nww(tab[a-2], tab[a-1]);
a--;
}
nwww[b-1]=tab[0];
b--;
}
while(n)
{
cout<<nwww[n-1]<<endl;
n--;
}
system("pause");
return 0;
}
Szczerze mówiąc nie rozumiem ani kodu z drugiego postu nade mną ani nie wiem jak rozwiązać to zadanie za pomocą średniej harmonicznej, ale przecież wystarczy policzyć deltę dla tego równania i jej znak wyznacza liczbę rozwiązań tego równania.
Oto testy, jakby miały komuś pomóc:
5.0 6.0 7.0
4.0 4.0 4.0
4.0 5.0 4.0
-5.0 5.0 4.0
4.0 5.0 -5.0
4.5 2.5 0.5
4.5 2.5 -0.5
1.0 4.0 1.0
1.0 2.0 1.0
4.0 4.0 1.0
2.0 2.0 0.5
0.5 2.0 2.0
Output:
0
0
0
2
2
0
2
2
1
1
1
1
Witam, napisalem program, dla przykladowych danych wyswietla dobre wyniki ale sedzia upiera sie ze sa bledne odpowiedz.
Prosze o pomoc jesli ktos wie dlaczego nie uznaje mi programu.
#include <iostream>
#include <cstdio>
#define MAXV 1000
using namespace std;
int odwiedzone[MAXV+1];
struct node
{
int inf;
node* next;
node* prev;
};
struct Stos
{
int tab[MAXV+1];
int stan;
Stos(){stan=0;}
void push(int v)
{
tab[stan] = v;
stan++;
}
int pop()
{
if(stan>0)
{
stan--;
return tab[stan];
}
}
bool pusty()
{
if(stan==0){return true;}else{return false;}
}
};
struct Kolejka
{
int start, stop;
int tab[MAXV+1];
Kolejka()
{
start = 0;
stop = 0;
}
void dodajNaKoniec(int v)
{
tab[stop] = v;
stop++;
}
int usunZPoczatku()
{
int tmp = tab[start];
start++;
return tmp;
}
bool pusta()
{
if(stop==start){return true;} else {return false;}
}
};
struct Graf
{
node* lista[MAXV+1];
int wierzcholki;
Graf()
{
for(int j = 0; j<=MAXV; j++)
{
lista[j] = NULL;
}
}
void dodaj(int v, int i)
{
if(i!=0)
{
node* temp = new node;
temp->inf = i;
temp->next = lista[v];
lista[v] = temp;
}
}
void DFS(int v)
{
for(int i = 0; i<=wierzcholki; i++)
{
odwiedzone[i] = 0;
}
Stos stos;
int tmp;
node* p = new node;
stos.push(v);
odwiedzone[v]=1;
while(!stos.pusty())
{
tmp = stos.pop();
cout<<tmp/*<<" "*/;
p = lista[tmp];
while(p!=NULL)
{
if(odwiedzone[p->inf]==0)
{
stos.push(p->inf);
odwiedzone[p->inf] = 1;
}
p = p->next;
}
}
}
void BFS(int v)
{
for(int i = 0; i<=wierzcholki; i++)
{
odwiedzone[i] = 0;
}
Kolejka kolejka;
int tmp;
node* p = new node;
kolejka.dodajNaKoniec(v);
odwiedzone[v]=1;
while(!kolejka.pusta())
{
tmp = kolejka.usunZPoczatku();
cout<<tmp/*<<" "*/;
p = lista[tmp];
while(p!=NULL)
{
if(odwiedzone[p->inf]==0)
{
kolejka.dodajNaKoniec(p->inf);
odwiedzone[p->inf] = 1;
}
p = p->next;
}
}
}
};
int main()
{
int t, n, z, m, v, a, b=0;
cin>>t;
Graf tabGrafow[t];
for(int i = 0; i < t; i++)
{
cin>>n;
tabGrafow[i].wierzcholki = n;
for(int j = 0; j < n; j++)
{
b=0;
cin>>z;
cin>>m;
for( int k = 0; k < m; k++)
{
cin>>a;
tabGrafow[i].dodaj(z,a);
}
}
cout<<"graph "<<i+1<<endl;
cin>>z;
cin>>m;
while(z!=0)
{
if(m==1)
{
tabGrafow[i].BFS(z);
}
else
{
tabGrafow[i].DFS(z);
}
//cout<<endl;
cin>>z;
cin>>m;
}
}
}
@edit
dobrze, chyba juz wiem gdzie mam blad D: zle mi dodaje w liscie sasiedztwa elementy :<
Witam. co oznacza threshold: 5 jako wynik tego zadania? 2 pierwsze zestawy przeszedłem bez problemu i teraz próbuję napisać na tyle szybki algorytm żeby zaliczyło 3. I chyba mi się udało, bo na ideone dla
1
3
10000
mam czas działania 0.1s
edit: właśnie mi zaliczyło, po drobnej optymalizacji. Ale dalej przydało by się info co to za kod błędu.
Witam. Podpinam się do postu
Mam kod, który na danych testowych działa dobrze, a przy zgłoszeniu daje złe odpowiedzi. Gdzie może być błąd ?
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
void DFS (vector <vector <int> > &graf, int wierzcholek);
void DFS (vector <vector <int> > &graf, int wierzcholek, vector <bool> &uzyto);
void BFS (vector <vector <int> > &graf, int wierzcholek);
vector <vector <int> > graf;
vector <int> wierzcholki;
int main ()
{
ios_base::sync_with_stdio(0);
int t; // Ilość grafów
cin >>t;
// Pobierz info. o każdym grafie i wykonaj dla niego fun. DFS lub BFS
for (int i__ =0; i__ <t; i__++)
{
int n; // Ilość wierzchołków w grafie
cin >>n;
for (int j__ =0; j__ <n; j__++)
{
int i, m; // 'i-ty' wierzchołek i 'm' wierzchołków jakie są z nim połączone
cin >>i >>m;
wierzcholki.clear ();
for (int z =0; z <m; z++)
{
int x; // Sąsiedni wierzchołek do 'i-tego'
cin >>x;
wierzcholki.push_back (x);
}
graf.push_back (wierzcholki);
}
cout <<"graph " <<(i__ +1)<<endl;
while (1)
{
int v, i;
cin >>v >>i;
// Przerwij pętlę jeżeli koniec danych do odczytu
if (v ==0 && i ==0)
break;
if (i ==0)
DFS (graf, v);
else
BFS (graf, v);
cout <<endl;
}
graf.clear ();
}
return 0;
}
//******************************************************************************************
//******************************************************************************************
void DFS (vector <vector <int> > &graf, int wierzcholek)
{
vector <bool> uzyto (graf.size (), false);
DFS (graf, wierzcholek, uzyto);
}
//******************************************************************************************
//******************************************************************************************
void DFS (vector <vector <int> > &graf, int wierzcholek, vector <bool> &uzyto)
{
vector<int>::iterator iter; //iterator po sąsiadach wierzchołka
uzyto[wierzcholek] =true; //kolorujemy odwiedzony wierzchołek
cout <<wierzcholek <<" ";
// Przejdź po połączonych wierzchołkach, jeśli tam nie byłeś wywołaj fun. DFS
for (iter =graf [wierzcholek -1].begin (); iter !=graf [wierzcholek -1].end (); iter++)
{
if (uzyto [*iter] ==false)
DFS (graf, *iter, uzyto);
}
}
//******************************************************************************************
//******************************************************************************************
void BFS (vector <vector <int> > &graf, int wierzcholek)
{
vector <int>::iterator iter;
vector <bool> uzyto (graf.size (), false);
queue <int> Q;
uzyto [wierzcholek -1] =true;
Q.push (wierzcholek);
cout <<wierzcholek <<" ";
while (!Q.empty ())
{
int u =Q.front ();
Q.pop ();
for (iter =graf [u -1].begin (); iter !=graf [u -1].end (); iter++)
{
if (uzyto [*iter -1] ==false)
{
cout <<*iter <<" ";
uzyto [*iter -1] =true;
Q.push (*iter);
}
}
}
}
-- Cz lip 19, 2012 12:23 pm --
Może ktoś rzucić na to okiem? Wiem, że zadanie stare ale dla mnie jest ważne to dlaczego na testowych danych działa Ok, a na stronie wyrzuca 'Błędna odpowiedź'.
Program działał z cout i cin poprawnie, jednak dostałem 10/15 pkt. z TLE dla ostatniego testu i chciałem go przyśpieszyć. Zamieniłem cout i cin na printf i scanf. Na moim komputerze dalej działa, jednak spoj go nie przyjmuje i nie mogę znaleźć błędu.
-- kod usunięty --
Z góry dziękuję za wszelką pomoc
Jeżeli chodzi o "graph" to drukuje numer grafu. Moja implementacja daje poprawne wyniki dla zadań testowych (poprawne znaczy się wyjście jest takie samo jak w przykładzie - z dokładnością do białych znaków).
Główna pętla programu (razem z wypisywaniem numeru grafu)
int run(FILE* in, FILE* out)
{
const int t = readInt(in);
assert(t <= 100);
for (int i=0; i<t; ++i)
{
g.reset();
g.readFrom(in);
fprintf(out, " graph %d ", i+1);
processQueries(in, out);
}
return 0;
}
Jeszcze jakieś wskazówki?
Witam wszystkich obecnych!
Walczę z programem wyżej już jakiś czas, nasz kochany sędzia online stwierdzę błędna odpowiedz. Sprawdzałem mnóstwo przykładów, rozwiązywałem je na kartce i na moim kompie i wg mnie ten program liczy wszystko dobrze. Może ma ktoś pomysł o co może chodzić? Zapewne coś mi umknęło...
Cześć!
Jak na początkującego przystało, zwracam się z pomocą do was!
Stworzyłem kod. Jak na moją głowę i testy które zrobiłem wydawał się dobry. Jak zwykle gdzieś zawiodłem.
Użyłem wskaźników (chociaż mam z nimi wiele problemów) by stworzyć tablice o wielkości którą poda test.
Zresztą co się będę rozpisywał! Poproszę o jakieś wskazówki, nie koniecznie dotyczące tego zadania, ale ogólnie jeżeli coś znajdziecie "dziwnego":
[bbone=cpp,3145]Tu byl kod[/bbone]
include
int main(void)
{
int t,n[10],i,j,fact=1,p[10];
scanf("%d",&t);
while(i
{
for(i=0;iscanf("%d",&n[i]);
p[i]=n[i];
fact=1;
for(j=1;j<=p;j++)
fact=j*fact;
printf("%d\n",fact);
i++;
}
return 0;
}
i am getting time limit exceeded. I am not understanding what changes have to be done.it is giving crct output in my c compiler. plzz help me out of this.