Мелкие задачки для крупных мозгов 8

Тема в разделе "WASM.ZEN", создана пользователем The Svin, 5 мар 2005.

  1. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Математика.

    Трудно написать эффективный алгоритм если точно не представляешь каких входных значений скорее всего прийдётся ожидать.

    Задача - оценка частоты количества бинарных строк в двойном слове.

    всего вероятных значений в двойном слове 2^32

    Из них

    по одной строке - два значения

    две строки - ... продолжите список в скольких значениях встречаются 2...32 строки.

    Объясните метод подсчёта.
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Код (Text):
    1. строк 1 - чисел 2
    2. строк 2 - чисел 62
    3. строк 3 - чисел 930
    4. строк 4 - чисел 8990
    5. строк 5 - чисел 62930
    6. строк 6 - чисел 339822
    7. строк 7 - чисел 1472562
    8. строк 8 - чисел 5259150
    9. строк 9 - чисел 15777450
    10. строк 10 - чисел 40320150
    11. строк 11 - чисел 88704330
    12. строк 12 - чисел 169344630
    13. строк 13 - чисел 282241050
    14. строк 14 - чисел 412506150
    15. строк 15 - чисел 530365050
    16. строк 16 - чисел 601080390
    17. строк 17 - чисел 601080390
    18. строк 18 - чисел 530365050
    19. строк 19 - чисел 412506150
    20. строк 20 - чисел 282241050
    21. строк 21 - чисел 169344630
    22. строк 22 - чисел 88704330
    23. строк 23 - чисел 40320150
    24. строк 24 - чисел 15777450
    25. строк 25 - чисел 5259150
    26. строк 26 - чисел 1472562
    27. строк 27 - чисел 339822
    28. строк 28 - чисел 62930
    29. строк 29 - чисел 8990
    30. строк 30 - чисел 930
    31. строк 31 - чисел 62
    32. строк 32 - чисел 2




    метод подсчёта:


    Код (Text):
    1. #include <stdio.h>
    2.  
    3. int cnt[33]={0,2};
    4.  
    5. int main()
    6. {
    7.     for(int i=2;i<=32;i++)
    8.     {
    9.         for(int j=i;j>1;j--)
    10.             cnt[j]+=cnt[j-1];
    11.     }
    12.     for(i=1;i<=32;i++)
    13.     {
    14.         printf("строк %d - чисел %d\n",i,cnt[i]);
    15.     }
    16.     return 0;
    17. }