[c++][spoj] problem z zadaniem SUMAN

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

[c++][spoj] problem z zadaniem SUMAN

Post autor: turkiSh »

Witam, męczę się z tym programem już długi czas:
i dosłownie nie mam już pomysłu co robię źle. Gdy testuje program u mnie na kompilatorze wszystko jest ok, lecz system uznaje jako błędny wynik.
Ukryta treść:    
jakbym liczył na bieżąco silnię z każdej liczby to raczej małe szanse, że program wyrobiłby się w określonej ilości czasu, dlatego dałem switcha, bo 2 ostatnie cyfry dla dużych liczb są zawsze te same.


Ma ktoś jakieś pomysły?
Pozdrawiam
Ostatnio zmieniony 3 mar 2009, o 15:35 przez turkiSh, łącznie zmieniany 1 raz.
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

[c++][spoj] problem z zadaniem SUMAN

Post autor: Szemek »

turkiSh pisze:jakbym liczył na bieżąco silnię z każdej liczby to raczej małe szanse, że program wyrobiłby się w określonej ilości czasu, dlatego dałem switcha, bo 2 ostatnie cyfry dla dużych liczb są zawsze te same.
porady:
1. nie tablicuj wyników, wypisuj je na bieżąco
2. dla \(\displaystyle{ n \geq 10}\), liczba \(\displaystyle{ n!}\) kończy się dwoma zerami - (dla n<10 możesz liczyć te silnie, w przeciwnym wypadku odpowiedni warunek)
3. skorzystaj ze zwykłego dzielenia przez 10 i dzielenia modulo przez 10 (w odpowiednich miejscach)
4. ten kod jest za długi dla tego problemu
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

[c++][spoj] problem z zadaniem SUMAN

Post autor: turkiSh »

Szemek pisze: porady:
1. nie tablicuj wyników, wypisuj je na bieżąco
2. dla \(\displaystyle{ n \geq 10}\), liczba \(\displaystyle{ n!}\) kończy się dwoma zerami - (dla n<10 możesz liczyć te silnie, w przeciwnym wypadku odpowiedni warunek)
3. skorzystaj ze zwykłego dzielenia przez 10 i dzielenia modulo przez 10 (w odpowiednich miejscach)
4. ten kod jest za długi dla tego problemu
Ad 2) No dlatego mam w switchu default: 0 0; (default zostanie uzyty dla liczby >9)
oraz rozważony każdy pozostały przypadek od 1-9
Ad 3) to chyba ten switch załatwia
Ad 4) Wydaje Ci się


Ad 1) Sprawdzę
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

[c++][spoj] problem z zadaniem SUMAN

Post autor: flashion »

Kod: Zaznacz cały

#include <iostream>
using namespace std;

unsigned int l[30];
unsigned int j[5] = {1,1,2,6,4};
unsigned int d[10] = {0,0,0,0,2,2,2,4,2,8};
unsigned int temp, many;

int main()
{
	cin >> many;
	for(int i=0;i<many;i++)
	{
		cin >> temp;
		l[i] = temp;
	}
	for(int i=0;i<many;i++)
	{
		if(l[i] >= 10) cout << 0 << " ";
		else cout << d[l[i]] << " ";
		
		if(l[i] >= 5) cout << 0 << endl;
		else cout << j[l[i]] << endl;
	}
}
Ostatnio zmieniony 28 lut 2009, o 20:11 przez flashion, łącznie zmieniany 1 raz.
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

[c++][spoj] problem z zadaniem SUMAN

Post autor: Szemek »

turkiSh, zapomniałeś o przypadku: \(\displaystyle{ 0!=1}\)
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

[c++][spoj] problem z zadaniem SUMAN

Post autor: turkiSh »

o kurde, no faktycznie ale gafa

Kod: Zaznacz cały

if (b<1) b=1;
załatwia sprawę.
flashion zależy mi na pomocy w moim kodzie bo próbuję rozwiazywac zadania, zeby cos sie nauczyc, wiec w gotowcach zbytnio nie gustuję


Oczywiście teraz od razu z tym 0! zaakceptowali rozwiazanie


Dziękuję za pomoc i serdecznie pozdrawiam
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

[c++][spoj] problem z zadaniem SUMAN

Post autor: flashion »

pytałeś, czy ktoś ma jakiś pomysł.
na przyszłość:

Kod: Zaznacz cały

bo=(!(bo)); // nieczytelnie
bo=1-bo; // od razu lepiej
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

[c++][spoj] problem z zadaniem SUMAN

Post autor: turkiSh »

Nie chciałem specjalnie nowego tematu robić.


Robię to zadanie nie dla dobrego wyniku, lecz jedynie dla wlasnej przyjemnosci wiec dlugosc kodu nie ma dla mnie znaczenia.



wedlug tego dla danych wejsciowych:
1
2
3
4
5
6
7
8
9
10

1
12
123
1234
12345
123456
1234567
12345678
123456789
12345678910



moj kod:

Kod: Zaznacz cały


#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;


int main()
{

string tab[100]; //tablica wprowadzonych danych
string tabG[100];//tablica glowna, danych wyprowadzanych

for(int i=1;i<=10;i++) //wczytuje podawane dane do 1. tablicy

cin>>tab[i];

/* przepisuje dane do tablicy glownej, ukladajac 
strukture jaka bedzie wyprowadzana przez cout pojedyncza petla */


for(int i=1;i<=10;i++) 
{

for(int j=1;j<=i;j++)

tabG[i]=tabG[i]+tab[j];  // tworzenie glownej tablicy


}
for(int i=1;i<=10;i++) //wyprowadzanie danych
cout<<tabG[i]<<endl;

system("PAUSE");
} 

 
probuje tez tak:

Kod: Zaznacz cały

#include <iostream>

using namespace std;

int main()

{

int tab[10];

for(int i=1;i<=10;i++)

cin>>tab[i];

for(int i=1;i<=10;i++)

{

for(int j=1;j<=i;j++)

cout<<tab[j];

cout<<endl;
}

} 
znow blad zla odpowiedź.

dla np testow
1
2
3
probowalem
1
3
6
tez źle.

Moze ktos mi wyjasnic zadanko?


pozdrawiam
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

[c++][spoj] problem z zadaniem SUMAN

Post autor: matshadow »

dam wskazówkę - jest wzór na sumę liczb od 1 do n, a mianowicie \(\displaystyle{ \frac{n\cdot (n+1)}{2}}\)
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

[c++][spoj] problem z zadaniem SUMAN

Post autor: turkiSh »

o kurde, nie zczaiłem tego zadania x) myslalem ze chodzi o "łączenie" tych liczb, a moj program wlasnie je lączył, że 1+2=12;
niefortunnie przykladowe testy w opisie tego zadania mnie zmyliły.

dzięki wielkie! Pozdrawiam
PanSatyros
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 23 lut 2010, o 16:42
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz

[c++][spoj] problem z zadaniem SUMAN

Post autor: PanSatyros »

Mam tako kod, a pokazuje mi złe rozwiązanie ;/ O co chodzi?
#include <iostream>
int main(){int a,t=10;
while(t--){std::cin>>t;std::cout<<(t*t+t)/2<<"
";}return 0;}
Awatar użytkownika
Zordon
Użytkownik
Użytkownik
Posty: 4977
Rejestracja: 12 lut 2008, o 21:42
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 75 razy
Pomógł: 910 razy

[c++][spoj] problem z zadaniem SUMAN

Post autor: Zordon »

wczytuj do a, zamiast do t -.-
teennewbie
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 6 gru 2010, o 16:54
Płeć: Mężczyzna
Lokalizacja: PL
Podziękował: 4 razy

[c++][spoj] problem z zadaniem SUMAN

Post autor: teennewbie »

jak skrócić taki kod o połowę jeszcze to ja nie wiem
mógłby mi ktos pomoc

Kod: Zaznacz cały

#include <stdio.h>
int main(){int i,x=10;while(x--){scanf("%d",&i);printf("%d
",i*(i+1)/2);}}
Awatar użytkownika
Zordon
Użytkownik
Użytkownik
Posty: 4977
Rejestracja: 12 lut 2008, o 21:42
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 75 razy
Pomógł: 910 razy

[c++][spoj] problem z zadaniem SUMAN

Post autor: Zordon »

wywal includa, jak wyslesz w C to powinno smigac bez tego
poprobuj tez

Kod: Zaznacz cały

while(scanf(...))
, wtedy bedziesz mogl sie pozbyc x'a
teennewbie
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 6 gru 2010, o 16:54
Płeć: Mężczyzna
Lokalizacja: PL
Podziękował: 4 razy

[c++][spoj] problem z zadaniem SUMAN

Post autor: teennewbie »

Kod: Zaznacz cały

int main(void){
  int i = 10;
  while(scanf("%d",&i)){;
    printf("%d
",i*(i+1)/2);
  }
}
z takim kodem spoj dla C wywala mi przekroczenie czasu
ODPOWIEDZ