İnşa#10452

İnşa (Həll təhlili)

Cümlədəki sözlərin sayı -ə əsaslanaraq problemi həll etmək üçün bir formul tapaq.

cüt ədəd olsun. Barış və Əzizin cümlələrini nəzərdən keçirək:

"Fərq" massivindəki ədədlərin cəmini hesablayın. Massivdəki ədədləri iki bərabər hissəyə bölün. 1-dən n - 1-ə qədər olan ədədlərin addımında ilə cəmini tapın (bu, arifmetik proqressiyadır). Bu aralıqda ədəd var. Buna görə də "fərq" massivindəki ədədlərin cəmi belədir:

2 \cdot {1 + n - 1 \over 2} \cdot {n \over 2} = {n^2 \over 2}

tək ədəd olsun. Barış və Əzizin cümlələrini nəzərdən keçirək:

"Fərq" massivindəki ədədlərin cəmini hesablayın. Massivdəki ədədləri iki bərabər hissəyə bölün. 2-dən n - 1-ə qədər olan ədədlərin addımında ilə cəmini tapın (bu, arifmetik proqressiyadır). Bu aralıqda (n - 1) / 2 ədəd var. Buna görə də "fərq" massivindəki ədədlərin cəmi belədir:

2 \cdot {2 + n - 1 \over 2} \cdot {n - 1 \over 2} = {(n + 1) \cdot (n - 1) \over 2} = {n^2 - 1 \over 2}

Nümunə

n = 8 olsun.

"Fərq" massivindəki ədədlərin cəmi 8^2 / 2 = 32dir.

n = 7 olsun.

"Fərq" massivindəki ədədlərin cəmi (7^2 - 1) / 2 = 24dir.

Alqoritm icrası

Test hallarının sayını oxuyun .

scanf("%d", &tests);
while (tests--)
{

Hər bir dəyəri üçün nəticəni hesablayıb çap edin.

  scanf("%d", &n);
  if (n % 2 == 0)
    res = n * n / 2;
  else
    res = (n * n - 1) / 2;
  printf("%lld\n", res);
}

Python icrası

Test hallarının sayını oxuyun .

tests = int(input())

for _ in range(tests):

Hər bir dəyəri üçün nəticəni hesablayıb çap edin.

  n = int(input())
  if n % 2 == 0:
    res = n * n // 2
  else:
    res = (n * n - 1) // 2
  print(res)