Автор Тема: Алгоритм исключения ненужных чисел 4 и 13  (Прочитано 4147 раз)

0 Пользователей и 1 Гость просматривают эту тему.

max2

  • Гость
Братцы, помогите решить задачу по программированию, только в СИ.
Цитировать
В американской армии считается несчастливым число 13, а в японской — 4. Перед международными учениями штаб российской армии решил исключить номера боевой техники, содержащие числа 4 или 13 (например, 40123, 13313, 12345 или 13040), чтобы не смущать иностранных коллег. Если в распоряжении армии имеется 100 тыс. единиц боевой техники и каждая боевая машина имеет номер от 00001 до 99999, то сколько всего номеров придётся исключить?
Не получается циклы закрутить как надо. :(
 

kamre

  • Гость
От 00001 до 99999 это не сто тысяч, чуть меньше:)
Лично я закрутил так:)
Понимаю что много лишнего, но сам еще учусь:)

#include <stdio.h>
int main ()
{
    int a,i,b,c,d,s,s1,s2;
    s=0;
    s1=s2=0;
    //исключаем цифру 4
    for(i=1;i<=99999;i++)
        {
            a=i;
             {
                 b=a%10;
                 if(b==4)
                    s++;
                 a=a/10;
             }

        }
        printf("%d\n\n",s);
    //исключаем цифру 13
     for(i=1;i<=99999;i++)
              {
               c=i;
                 {
                     d=c%100;
                     if(d==13)

                        s1++;
                     c=c/10;
                 }

              }
              printf("%d\n\n",s1);
    //выводим общий результат
        s2=s+s1;
        printf("summa= %d\n\n",s2);
    return 0;
}
Сначала выбрал четверки, потом 13 и вывел количество техники, которую нужно исключить из парада, получилось 11000.
 

flobik

  • Гость

Так это задача "Суеверные военные". :)  Всё можно сделать гораздо проще:
#include <stdio.h>
int main()
{
    int a,n,i;
    n=0;
    for(i=3;i<=99999;i++)
    {
        a=i;
        while(a>=4)
        {
            if(a%10==4 || a%100==13)
                n++;
            break;
        }
            a/=10;
    }

    printf("%d\n",n);
    return 0;
}
В результате теже 11тыс.
 

vic22

  • Гость
А почему у вас получается 11к увсех? прочто на других форумах там совсем другие сумы встречал в ответах к этой задаче 43840, 44400, там правда на джаве решали но думаю это не существенно.
 

mayton

  • Гость

Потому что решали такие же безграмотные программисты, жуть берет. И самое главное знаете что, ведь они где-то работают и наверно даже считаются хорошими специалистами.
Сами посудите, как может быть ответ в 43к-44к из 100 к?! Ну как, даже чисто теоретически. Откиньте четверки - они занимают ровно одну десятую часть, то есть это будет 10к, 1 и 3 - еще 20к в сумме. Итого 30к. Это максимум, что могут дать три цифры, и все равно это в полтора раза меньше, чем ваши ответы в почти 45к. Но ведь цифра 13 это не 1 и 3 по отдельности, значит общая сумма будет еще меньше! Не больше, а меньше. Пусть 19к. Но ведь нужно еще учесть, что мы не считаем одно число несколько раз! То есть, 44413 и 13444 мы посчитаем не 4 раза, а всего один!
Значит общая сумма техники будет еще меньше. Как раз около 11к и получится, это же очевидно. Как можно насчитать 43840 или 44400 в такой простой программе, ума не приложу.
Чем люди думают, вообще непонятно. :(
 

Оффлайн Stodruzey

  • Новичок
  • *
  • Сообщений: 1
  • Карма: +0/-0
  • Рефералов: 0
    • Просмотр профиля
Хоть ответы и старые, но тема актуальная, не могу не прокомментировать, чтобы не заканчивалась неправильно. Набросаем крупными мазками. Четверки: с 40 000 до 49 999 дает 10 000 чисел (это 10%). В каждом десятке тысяч по тысяче: 4000-4999 +
 14000-14999 + 24000-24999 + 34000-34999 + и т.д.). Это еще около 9% (потому что в 4м десятке уже посчитали эту тысячу). Как у вас могло получаться всего 11000? Далее в КАЖДОЙ тысяче из 100 000 по сотне с четверками: 400-499 + 1400-1499 +  2400-2499 + и т.д. дает еще 100*100=10 000 чисел (реально меньше, т.к. некоторые уже посчитаны). Это уже около 30% от 100 000. Далее, по десятку в каждой сотне из каждой тысячи 40-49, 140-149, 240-249, 340-349 и т.д. дает еще почти 10 000 чисел! А мы еще не считали 13. Так и набирается 43 840. Не торопитесь отвечать, подумайте.
Причем с ростом большого числа количество четверок и тринадцаток увеличивается: при миллионе таких чисел уже больше половины, а при миллиарде уже почти 65%. Неожиданные пропорции, правда?
 

 

В быстром ответе можно использовать BB-теги и смайлы.

Имя: E-mail: