Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на массивы, Правильно ли я понял условие задачи 
V
    Опции темы
Voldemar2004
Дата 30.4.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Итак, текст задачки: найти минимальное число среди элементов массива, сумма цифр которых максимальна.

Код

#include <iostream.h>
#include <conio.h>

int main(int argc, char* argv[])
{
const int n=10;

int a[n]={198, 7, 457, 7650, 0, 0, 4234, 3, 4, 0};

int len;
int max=0;
int tmp_array[n];

for(int j=0; j<n; j++)
{
        /* подсчет количества цифр в числе */
        int f=0, z=a[j];

        do
        {
        z/=-10; f++;
        }
        while(z!=0);

        len=f; f=0;
        /* -------------------------------------------- */


/* сложение цифр числа между собой */

int t=1;
int buffer=0;

for(int k=0; k<len-1; k++) {t*=10;};

        for (int i=0; i<len; i++)
        {
        buffer+=a[j]/t%10; t/=10;
        }

        tmp_array[j] = buffer;

len=0;
}
/* ----------------------------------------------- */


/* находим числа, в которых сумма цифр максимальна */

        max=tmp_array[0];

        for(int i=0; i<n; i++)
        {
        if(tmp_array[i] > max) max=tmp_array[i];
        }

/* ------------------------------------------------------------------- */

                int dyn_array[n];        
                int buffer=0, counter=0;

                for(int i=0; i<n; i++)
                {
                        if(tmp_array[i]==max)
                        {

                        dyn_array[i] = a[i];

                        buffer = i; counter++;

                                cout<<dyn_array[buffer]<<"\n";

                        }
                }


/* находим минимальное число среди найденных чисел */

                                int min = dyn_array[buffer];
                                for(int i=0; i<counter+1; i++)
                                {
                                if(dyn_array[i] < min) min = dyn_array[i];
                                }
                                cout<<"min = "<<min<<"\n";

/* -------------------------------------------------------------------- */

getch();

return 0;
}
 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Fin
Дата 30.4.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



Сделай подсчет суммы всех чисел в числе в отдельную функцию. Теперь насчет твоего кода
Код

for(int j=0; j<n; j++)
{
        /* подсчет количества цифр в числе */
        int f=0, z=a[j];
        do
        {
        z/=-10; f++;
        }
        while(z!=0);
        len=f; f=0;
        /* -------------------------------------------- */
/* сложение цифр числа между собой */
int t=1;
int buffer=0;
for(int k=0; k<len-1; k++) {t*=10;};
        for (int i=0; i<len; i++)
        {
        buffer+=a[j]/t%10; t/=10;
        }

Зачем тут делать два цикла, когда можно обойтись и одним? 
Код

int SumNum(int Num)
{
    int res=0;
    while (Num>0)
    {
       res += Num % 10;
      Num /=10;
    }
   return res;  
}
 

Это сообщение отредактировал(а) Fin - 30.4.2006, 18:37


--------------------
Пролетал мимо.
PM MAIL   Вверх
Fin
Дата 30.4.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



В принципе, как я понял условия. Нужно искать максимум в массиве "сумм всех знаков числа". По другому я никак не вижу смысла данной задачи. Вот если найдется несколько таких чисел, то брать самое минимальное из них.

Добавлено @ 21:38 
Мое решение:
Код

#include <iostream.h>

int SumNum(int Num)
{
    int res=0;
    while (Num>0)
    {
       res += Num % 10;
      Num /=10;
    }
   return res;  
}

int main(int argc, char* argv[])
{
   const int n=10;
   int a[n]={7, 457, 7650, 0,198, 0, 4234, 3, 4, 0};
   int id=0;
   int max=SumNum(a[id]);
   int temp;
   for(int i=1; i<n; i++)
   {
       temp=SumNum(a[i]);
       if (temp>=max)
       {
           if (temp == max)
           {
               if (a[id]>a[i]) id=i;
           }
           else
           {
               max=temp;
               id=i;
           }
       }
   }
   cout << id<<". " << "Num = " << a[id] << "Sum = " << max;
   return 0;
}
 

Это сообщение отредактировал(а) Fin - 30.4.2006, 21:26


--------------------
Пролетал мимо.
PM MAIL   Вверх
Voldemar2004
Дата 30.4.2006, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Fin, но у тебя результат получается совсем не такой, как у меня.
Цитата(Voldemar2004 @  30.4.2006,  18:07 Найти цитируемый пост)
найти минимальное число среди элементов массива, сумма цифр которых максимальна.


1) Я разложил эту фразу так: есть элементы массива, для каждого элемента надо найти сумму его цифр, выбираем максимальные элементы (их может быть несколько - одинаковые): если просуммировать цифры чисел 198 и 7650 получится 18. Нашли значит max, потом из них (198 и 7650) выбираем min - 198.

2) Или может быть так: ищем в массиве ТАКОЙ min, ПРИ КОТОРОМ сумма цифр этого MIN максимальна. Например так

Код
int a[n]={0, 0, 9990, 0, 99108, 0, 4234, 3, 4, 0};


результат моей программы:

9990
99108
min=9990

И в 1)-ом и во 2)-ом моем случае получается один и тот же результат. Fin, пусть кто-то третий решит, где истина. 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Fin
Дата 30.4.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



У меня в первом варианте массива получилось 198. Как как сумма всех его знаков равна 18. Также у числа 7650 она равна 18. Но 198 меньше.
Во второй задаче у меня получилось число 9990, также как и у тебя. 


--------------------
Пролетал мимо.
PM MAIL   Вверх
Voldemar2004
Дата 1.5.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Цитата(Fin @  30.4.2006,  18:31 Найти цитируемый пост)
Сделай подсчет суммы всех чисел в числе в отдельную функцию.
Код
#include <iostream.h>    
#include <conio.h>

int Num_Count(int a)
{
        int f;
        f=0;
                do
                {
                a/=10; f++;
                }
                while(a!=0);
return f;
}

int main(int argc, char* argv[])
{
int a[2] = {-1, -32132};

cout<<Num_Count(a[1]);

getch();
return 0;
}
Цитата(Fin @  30.4.2006,  22:28 Найти цитируемый пост)
Во второй задаче у меня получилось число 9990, также как и у тебя. 
Значит все правильно.
 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.