Намиране на елемент в масив, за който сбора от цифрите е минимален

+6 гласа
470 прегледа
попитан 2016 май 9 в Обща дискусия от Божидар (220 точки)
етикетиран отново 2016 май 9 от Admin
Знам че езика е застарял, но дано има някой да помогне нужен ми е алгоритъм

за намиране  елемента с най-малка сума на съставящите го цифри.  

ако има въпрос относно програмата пишете на е-мейла ми :)

1 отговор

+4 гласа
отговорени 2016 май 9 от IvayloHristov (5,410 точки)
избран 2016 май 12 от Mitko Vasilev
 
Най-добър отговор

Здравей Божидар, 

Предполагам, че в задачата става дума за намирането на елемента от масив, на който сбора от цифрите му е най-малък. Това е малко усложнена задача за намиране на най-малкия елемент на масив и се решава така. 

Нека първо да си направим една функция за намиране на сбора на цифрите на дадено цяло число. Ще я кръстим SumOfDigits. 

int SumOfDigits(int num1) {
 int  t, sum = 0, remainder;  
 t = n;
 
   while (t != 0)
   {
      remainder = t % 10;
      sum       = sum + remainder;
      t         = t / 10;
   }

 return sum;

}

Като цяло във фунцията взимаме числото и го делим на 10, остатъка е последната цифра. След това на самото число присвояваме числото след деленето. А към един брояч sum добавяме сумата. 

Имайки вече функцията за изчисляване на сумата на цифрите, можем да напишем стандартен цикъл за намиране на минимална стойност. 

Нека да предположим, че всички стойности са ти в масив arr. 

int minValue = SumOfDigits(arr[0]);

int minElement = 0;

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

tmp = SumOfDigits(arr[i]);

 if ( tmp < min ) {

 minValue = tmp;

 minElement = i;

 }

}

Имаме две променливи minValue и minElement. В minValue пазим колко е сбора на цифрите, а в minElement пазим кой е индекса на елемента. 

Надявам се това да е помогнало :) 

Поздрави, 

    Иво Христов

коментиран 2016 май 9 от Божидар (220 точки)
Много ти благодаря Иво!!!
за задача та ми е нужно да  съставя текстово меню(което съм направил)
.Алгоритъма мисля че трябва да го добавя в SearchArray функцията нали ??
#include <stdio.h>
#define SIZE 100


int setSize(void);
void FillArray(int A[], int size);
void PrintArray(int A[], int size);
int SaveArray(int A[], int size);



void main(void)
{
    int c, A[SIZE], s, size;

    while (1)
    {
        printf("1. Fill array\n");
        printf("2. PrintArray\n");
        printf("3. SearchArray\n");
        printf("4. Exit\n");
        scanf("%d", &c);
        switch (c)
        {
        case 1:
            size = setSize();
            FillArray(A, size);
            break;
        case 2:
            PrintArray(A, size);
            break;

        case 3:

            SearchArray(A, size, s);

            break;


        }
        if (c == 4)
        {
            break;
        }
    }
}

void FillArray(int A[], int size)
{
    int i;
    for (i = 0; i < size; i++)
    {
        printf("Element:");
        scanf("%d", &A[i]);
    }
}

void PrintArray(int A[], int size)
{
    int i;
    for (i = 0; i < size; i++)
    {
        printf("%d", A[i]);
    }
}

int SearchArray(???????????????)
{





int setSize(void)
{
    int size = 0;
    do
    {
        printf("size = ");
        scanf("%d", &size);
    } while (size < 0 && size > 100);
    return size;
}
коментиран 2016 май 10 от IvayloHristov (5,410 точки)
Да, трябва да напишеш решението във функцията SearchArray и тази функция трябва да ти връща резултат кой е елемента, който има най-малък сбор от цифрите си.
...