Zadanie zrobione na 75/100 punktów

0

Witam zadanie za strony: http://main.edu.pl/pl/user.phtml?op=showtask&task=skw&con=PAS
Nie wiem dlaczego w jednym z testów jest zła odpowiedź.
Moje rozwiązanie:

#include <iostream>
using namespace std;

int main()
{
	int n;
	unsigned long long wynik = 0;
	cin >> n;
	
	for(int i = 1; i <= n; i++)
		wynik = wynik + i*i;
	
	cout << wynik;	
	
	return 0;
}
0

Sprawdź wyniki dla warunków brzegowych.

0

i musi być unsigned long long bo gdy jest zwykłym intem to dla i == 1000000 wyrażenie ii jest castowane na inta co jest normalne bo wkoncu mnożysz dwie liczby ze znakiem a
i
i przekracza zakres signed inta i wychodzi ujemna wartość
http://ideone.com/iorvc

1

A że za liczenie sumy jako sumy powinno rączki urwac, to inna sprawa?

0

ciekawe czy za takie rozwiązanie byłoby max pkt. ;)

#include <iostream>
using namespace std;
int main() {
  unsigned long long n, wynik;
  cin >> n;
  wynik = n*(n+1)*(2*n+1)/6;
  cout << wynik;
  return 0;
}

nie jest stabilne numerycznie, ale w zadanym przedziale się mieści.

0
  1. Jakie znaczenie ma fakt, że któraś z liczb n, n+1, 2n+1 dzieli się przez 6?
  2. Dla n=100 000, żadna się nie dzieli.
  3. Na moim komputerze ostatni program daje, dla n=100 000, błędny wynik (194884378).
  4. Po "podrasowaniu"
wynik = (n/2)*(n+1)*((2*n+1)/3);

daje również błędny wynik (1626540144).

1 użytkowników online, w tym zalogowanych: 0, gości: 1