SPOJ , problem

turkiSh
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 3 lut 2009, o 16:14
Płeć: Mężczyzna
Podziękował: 6 razy
Pomógł: 1 raz

SPOJ , problem

Post autor: turkiSh »

Szukałem wielu sposobow, znalazlem kilka ale jakby nie potrafię tego wykorzystać w zadaniu. Ćwiczyłem z prostym zadaniem:

lecz nie udaje się..

Próbuję w ten sposob:

Kod: Zaznacz cały

#include <iostream>
using namespace std;

main()
{
int b,i,n;
#
bool a;
a = false;
cin >> b;
do

{
if ((b==42) && (a == true)) break;
if (b==42) a = true;
else a= false;
cout<<b<<endl;
}

while (b == EOF);

}

Kod: Zaznacz cały


      #include <iostream>
      using namespace std;

      main()

      {

      int b,i,n;
      bool a;
      a = false;

      while(cin >> b) 

      {
      if(b == EOF) break;    //probowalem tez zamiast tej linijki tego: if(cin.peek() == EOF) break;
      if ((b==42) && (a == true)) break;
      if (b==42) a = true;
      else a= false;
      cout<<b<<endl;
      }

      } 


Kod: Zaznacz cały

      #include <iostream>
      using namespace std;
      main()
      {
      int b,i,n;
      bool a;
      a = false;
      while(~scanf("%d", &n)){
      cin>>b;
      if ((b==42) && (a == true)) break;
      if (b==42) a = true;
      else a= false;
      cout<<b<<endl;
      }
      } 
Myślę, że rozwiazanie samo w sobie jest ok, ale nie potrafię zrobic zeby przerywalo po nadaniu tego EOF.

Pomoze ktos?
Pozdrawiam
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

SPOJ , problem

Post autor: Afish »

Na moje oko pierwszy kod jest w miarę dobry, ale potrzebuje kilku przeróbek

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main()
{
int b,i,n;
#
bool a;
a = false;
do{
cin >> b;
if ((b==42) && (a == true)) break;
if (b==42) a = true;
else a= false;
cout<<b<<endl;
}while(true);
return 0;
}
1. Nie ma się co bawić z warunkiem w pętli while, tylko od razu dać tam true. Możesz przyjąć na 100%, że dane wejściowe podane przez organizatorów są poprawne.
2. Przeniosłem wczytywanie liczby do pętli do-while.
3. Ponieważ piszesz w C++, funkcja main powinna zwracać typ int (czyli zmieniłem deklarację funkcji i dodałem na końcu return 0).
Kodu oczywiście nie testowałem w ich systemie, ale powinien być dobry.
Awatar użytkownika
flashion
Użytkownik
Użytkownik
Posty: 113
Rejestracja: 20 sty 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 6 razy
Pomógł: 7 razy

SPOJ , problem

Post autor: flashion »

cały psikus tego zadania polega na tym, że liczby podajemy w oddzielnych liniach, a więc nie mogą one zostać automatycznie wypisane na ekran.

spróbuj z tym

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int tab[10000];
int main()
{
	int end, temp, size=0;
	for(;;size++)
	{
		cin >> temp;
		if(temp == 42) end++;
		else end=0;
		tab[size] = temp;
		if(end>1) break;
	}
	
	for(int i=0;i<=size;i++)
	{
		cout << tab[i] << endl;	
	}
	system("pause");
}
turkiSh
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 3 lut 2009, o 16:14
Płeć: Mężczyzna
Podziękował: 6 razy
Pomógł: 1 raz

SPOJ , problem

Post autor: turkiSh »

bardzo serdecznie dziękuję Afish i Flashion za pomoc Jednak psiukus o ktorym powiedział Flashion faktycznie "broił". Działa


Pozdrawiam
ODPOWIEDZ