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

Тема в разделе "WASM.ZEN", создана пользователем Broken Sword, 6 мар 2005.

  1. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    Дано:



    S=K1+K2+K3+K4+K5+K6+K7+K8



    S\16 = A (целая часть)

    B (остаток)



    С = K10 xor K9 xor K8 xor K7 xor K6 xor K5 xor K4 xor K3 xor K2 xor K1



    S*C\16 = G (целая часть)

    M (остаток)



    A-K9 = 0

    B-K10 = 0

    C-K11 = 0

    M-K12 = 0



    Найти:



    K1...K12
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Здесь нет ошибки?

    G причём?
     
  3. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    G всплывет позже :)

    забыл сказать - K1...K12 могут принять только вот эти значения: 3,13,1,7,10,9,0,14,6,4
     
  4. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    вообщем, нашел. Все сделать нулями :)
     
  5. Spiteful

    Spiteful New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2004
    Сообщения:
    33
    Вроде если k1,k2,...k8=14

    k9=7

    k10=0

    k11=7

    k12=0

    G=49 тоже подходит...
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Так я и не понял, зачем G :-(


    Код (Text):
    1. #include <stdio.h>
    2.  
    3. int main()
    4. {
    5.     int     k[] = {3,13,1,7,10,9,0,14,6,4};
    6.     const   values = sizeof(k)/sizeof(k[0]);
    7.  
    8.     int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12;
    9.  
    10.     for( i1 = 0; i1 < values; i1++ )
    11.     for( i2 = 0; i2 < values; i2++ )
    12.     for( i3 = 0; i3 < values; i3++ )
    13.     for( i4 = 0; i4 < values; i4++ )
    14.     for( i5 = 0; i5 < values; i5++ )
    15.     for( i6 = 0; i6 < values; i6++ )
    16.     for( i7 = 0; i7 < values; i7++ )
    17.     for( i8 = 0; i8 < values; i8++ )
    18.     for( i9 = 0; i9 < values; i9++ )
    19.     for( i10 = 0; i10 < values; i10++ )
    20.     for( i11 = 0; i11 < values; i11++ )
    21.     for( i12 = 0; i12 < values; i12++ )
    22.     {
    23.         int s = k[i1] + k[i2] + k[i3] + k[i4] + k[i5] + k[i6] + k[i7] + k[i8];
    24.         int a = s / 16;
    25.         int b = s % 16;
    26.         int c = k[i10] ^ k[i9] ^ k[i1] ^ k[i2] ^ k[i3] ^ k[i4] ^ k[i5] ^ k[i6] ^ k[i7] ^ k[i8];
    27.         int m = s * c % 16;
    28.  
    29.         if( a == k[i9] && b == k[i10] && c == k[i11] && m == k[i12] )
    30.             printf("k1=%u, k2=%u, k3=%u, k4=%u, k5=%u, k6=%u, "
    31.                    "k7=%u, k8=%u, k9=%u, k10=%u, k11=%u, k12=%u\n",
    32.                     k[i1], k[i2], k[i3], k[i4], k[i5], k[i6],
    33.                     k[i7], k[i8], k[i9], k[i10], k[i11], k[i12]
    34.                   );
    35.     }
    36.        
    37.     return 0;
    38. }
    39.  
     
  7. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    S\16 = A (целая часть)

    B (остаток)





    A-K9 = 0

    B-K10 = 0




    Создается впечатление, что ты людей только запутать хочешь. Быть может, проще было бы записать так?


    Код (Text):
    1.  
    2. S = 16*A + B => S = 16*K9 + K10
    3.  




    далее:


    Код (Text):
    1.  
    2. 16*K9 + K10 = S = K1 + K2 + ... + K8
    3.  




    далее:


    Код (Text):
    1.  
    2. K11 = K10^K9^...^K1
    3. K11 = (16G + K12)/S
    4.  




    Хотя, система все равно не решается. Больше неизвестных, чем уравнений :) Поэтому брютфорс, как S.T.A.S. и предложил.
     
  8. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Только брютфорсил бы я по другому условию. А именно, не столько циклов, сколько S.T.A.S. предложил, а на условие:


    Код (Text):
    1. 16*K9 + K10 = S = K1 + K2 + ... + K8
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Да, количество циклов следовало бы уменьшить - у меня большая часть времени ушла на переименовывание переменных в 11 for после copy-paste =)