Zadatak „Zbir kvadrata dvocifrenih brojeva”

Section author: Petar Marić <petarmaric@uns.ac.rs>

Dat je niz A od maksimalno 15 dvocifrenih prirodnih brojeva. Učitati n elemenata a zatim proveriti da li postoje parovi elemenata za koje važi da je zbir kvadrata njihovih cifara jednak. Sprovesti zaštitu unosa nad podatkom n.

Za sledeće podatke:

n = 7
A = {42, 67, 12, 36, 76, 29, 21}

očekivani izlaz je u sledećem formatu:

A[0] = 42
A[1] = 67
A[2] = 12
A[3] = 36
A[4] = 76
A[5] = 29
A[6] = 21

zbir(A[0]) = 20
zbir(A[1]) = 85
zbir(A[2]) = 5
zbir(A[3]) = 45
zbir(A[4]) = 85
zbir(A[5]) = 85
zbir(A[6]) = 5

zbir(A[1]) == zbir(A[4]) == 85
zbir(A[1]) == zbir(A[5]) == 85
zbir(A[2]) == zbir(A[6]) == 5
zbir(A[4]) == zbir(A[5]) == 85

count = 4

Primer rešenja

#include <stdio.h>

#define MAX_SIZE 15

int main() {
    int A[MAX_SIZE];
    int kvadrati[MAX_SIZE];
    int n;

    do {
        printf("Unesite broj elemenata niza (max %d): ", MAX_SIZE);
        scanf("%d", &n);
    } while(n<2 || n > MAX_SIZE);

    int i;
    for(i=0; i<n; i++) {
        printf("Unesite %d. clan niza: ", i+1);
        scanf("%d", &A[i]);
    }

    printf("\n");
    for(i=0; i<n; i++) {
        printf("A[%d] = %d\n", i, A[i]);
    }

    printf("\n");
    for(i=0; i<n; i++) {
        int cif_des = A[i] / 10;
        int cif_jed  = A[i] % 10;
        kvadrati[i] = cif_des * cif_des + cif_jed * cif_jed;
        
        printf("zbir(A[%d]) = %d\n", i, kvadrati[i]);
    }

    int j;
    int count = 0;
    printf("\n");
    for(i=0; i<n-1; i++) {
        for(j=i+1; j<n; j++) {
            if (kvadrati[i] == kvadrati[j]) {
                printf("zbir(A[%d]) == zbir(A[%d]) == %d\n", i, j, kvadrati[i]);
                count++;
            }
        }
    }

    printf("\ncount = %d\n", count);

    return 0;
}