Wątek przeniesiony 2018-11-14 15:19 z C/C++ przez furious programming.

Program sumujący n początkowych liczb – nie wiem gdzie dać inkrementację

0

Napisz program wyznaczający sumę n początkowych liczb, których suma cyfr jest liczbą parzystą (n zależy od użytkownika)

Mam już większość, ale nie wiem jak wykończyć. nie wiem gdzie dać inkrementację "i", żeby sprawdzało kolejne liczby. Z góry dziękuję.

#include<stdio.h>

void main()
{
  printf("Program wyznacza sumę n początkowych liczb, których suma cyfr jest liczbą parzystą.\n");
  int n, suma=0, liczba=0, suma2=0;
  printf("Podaj n: ");
  scanf("%d", &n);
  for(int j=0; j<n; j++)
    for(int i=11, k=i; i>0;)
      {
       liczba=k%10;
       suma+=liczba;
       k=k/10;
       if(suma%2==0)
	 {
	 suma2+=k;
	 i=k;
	 }
      }
  printf("suma=%d\n", suma2 );
}
0

Nie rozumiem po co tu cos dzielic, przypisywac i do k potem przypiywac zmodyfikowane k do i...

int getSumOfParityNumbers(int maxNumber) {
        int sum = 0;
        for (int i=0; i<=maxNumber; i++) {  
            if (i%2 == 0) {
                sum += i;
            }
        }

        return sum;
    }
0

Wiem, że trochę pomieszałem. Ale w poleceniu, nie chodzi o to, żeby dodać kolejne liczby parzyste, tylko te których suma cyfr jest parzysta, czyli np.: 11, 13, 19, 20

0

Lepiej logikę na funkcje podzielić:

int sum_digits(int n){
	int sum = 0;
	while (n != 0) {
    sum += n % 10;
    n /= 10;
	}
	return sum;
}

int sum_even(int n){
	int sum = 0;
	while (n){
		if (sum_digits(n) % 2 == 0){
			sum += n;
			n--;
			}
		n--;
	}
	return sum;
}
printf("sum even %d\n", sum_even(6)); // -> 12
printf("sum even %d\n", sum_even(10)); // -> 20
0

IMO treść zadania mówi, że n reprezentuje liczbę elementów sumy, a nie wartość maksymalną elementu dodawanego do sumy, więc powyższe rozwiązanie nie są prawidłowe.

1

Wydaje mi się, że można to rozwiązać bez pętli, patrząc na ciąg:

0, 2, 4, 6, 8, 11, 13, 15, 17, 19, 20, 22, …

Widzę pewną zależność. A i długość ciągu znaków można określić na podstawie tych danych.

0

Dziękuję bardzo za wszelką pomoc :D

0

"IMO treść zadania mówi, że n reprezentuje liczbę elementów sumy, a nie wartość maksymalną elementu dodawanego do sumy, więc powyższe rozwiązanie nie są prawidłowe." No tak, nie doczytałem, wystarczy troszkę zmienić, licznik jakiś dodać:

int sum_digits(int n){
    int sum = 0;
    while (n != 0) {
    sum += n % 10;
    n /= 10;
    }
    return sum;
}
 
int sum_even(int n){
	int cnt = 0;
    int sum = 0;
    int k = 0;
    while (cnt <= n){
        if (sum_digits(k) % 2 == 0){
            sum += k;
            cnt++;
            k++;
            continue;
            }
        k++;
    }
    return sum;
}
printf("%d, %d, %d\n", sum_even(6), sum_even(7), sum_even(13)); // -> 44, 59, 187

EDIT: Dodane testy.

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