Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Serge Kanilo                         2:5020/400     04 Oct 2001  23:47:59
 To : Roman Kirillov
 Subject : Re: Интересная задача
 -------------------------------------------------------------------------------- 
 
 "Roman Kirillov" <Roman.Kirillov@p63.f21.n5057.z2.fidonet.org> wrote in
 message news:1197717106@p63.f21.n5057.z2.ftn...
 
 >                               Пpивет, All!
 > Хочу пpедложить тебе сабж - пpосто pазмять мозги. Лично я над ним всю ночь
 > думал, и таки пpидумал pешение.
 > Итак. Есть 12 монет. Одна - фальшивая, отличается по весу (неизвестно,
 > легче или тяжелее). Hеобходимо за 3 взвешвания вычслить сию монету.
 
 Задачка довольно старая, и главная проблема - как просто описать решение.
 Hакрапал тут примитивный код
 
 const int HEAVY  =3;
 const int LIGHT =1;
 const int NORMAL =2;
 int Coins[12];
 
 int Number(int *A){ return A-Coins; }
 
 int FindFalseCoinFrom2(int*A,int*B,int*C){
   if(*A!=*C)
     return Number(A);
   return Number(B);
   }
 
 int FindLightCoinFrom3(int*A){
   if(A[0]>A[1])
     return Number(A+1);
   if(A[0]<A[1])
     return Number(A);
   return Number(A+2);
   }
 
 int FindHeavyCoinFrom3(int*A){
   if(A[0]>A[1])
     return Number(A);
   if(A[0]<A[1])
     return Number(A+1);
   return Number(A+2);
   }
 
 int FindFalseCoinFrom4(int*A){
   if(A[0]!=A[1])
     return FindFalseCoinFrom2(A,A+1,A+2);
   return FindFalseCoinFrom2(A+2,A+3,A);
   }
 
 int FindFalseCoinFrom444(int*A,int*B,int*C){
   // sum(A)>sum(B), C is NORMAL
   if(A[0]+A[1]+A[2]+B[3]>C[0]+C[1]+C[2]+A[3])
     return FindHeavyCoinFrom3(A);
   if(A[0]+A[1]+A[2]+B[3]<C[0]+C[1]+C[2]+A[3])
     return FindFalseCoinFrom2(A+3,B+3,A);
   return FindLightCoinFrom3(B);
   }
 
 int FindFalseCoinFrom12(int*A){
   if(A[0]+A[1]+A[2]+A[3]>A[4]+A[5]+A[6]+A[7])
     return FindFalseCoinFrom444(A,A+4,A+8);
   if(A[0]+A[1]+A[2]+A[3]<A[4]+A[5]+A[6]+A[7])
     return FindFalseCoinFrom444(A+4,A,A+8);
   return FindFalseCoinFrom4(A+8);
   }
 
 и проверочка всех вариантов
 
   int*A =Coins;
   bool goodResult =true;
 
   // для варианта с более тяжелой
   for(int falseCoin=0; falseCoin<12; falseCoin++){
     for(int aCoin=0; aCoin<12; aCoin++) A[aCoin]=NORMAL;
     A[falseCoin]=HEAVY;
     int whichCoin =FindFalseCoinFrom12(A);
     if(whichCoin!=falseCoin) goodResult =false;
     }
 
   // и для варианта с более легкой монетой
   for(int falseCoin=0; falseCoin<12; falseCoin++){
     for(int aCoin=0; aCoin<12; aCoin++) A[aCoin]=NORMAL;
     A[falseCoin]=LIGHT;
     int whichCoin =FindFalseCoinFrom12(A);
     if(whichCoin!=falseCoin) goodResult =false;
     }
 
 здесь проверяем, и видим, что goodResult всегда true,
 и значит алгоритм ловит все варианты.
 
 Cheers,
 Serge
 --- ifmail v.2.15dev5
  * Origin: Excite@Home - The Leader in Broadband http://home.com/f (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Интересная задача   Roman Kirillov   03 Oct 2001 08:28:17 
 Интересная задача   Sergey Konuhov   04 Oct 2001 13:14:51 
 Re: Интересная задача   Miroshnichenko Roman   04 Oct 2001 16:12:41 
 Re: Интересная задача   Elia Kosharsky   06 Oct 2001 15:43:10 
 Re: Интересная задача   Roman Miroshnichenko   08 Oct 2001 09:54:26 
 Интересная задача   Aleksey Malov   04 Oct 2001 15:38:56 
 Подсказка   Evgenij Masherov   05 Oct 2001 09:27:35 
 1 из 13 (было "Интересная задача")   Andrew Ezhguroff   05 Oct 2001 02:17:09 
 Re: Интересная задача   George Shuklin   04 Oct 2001 13:41:54 
 Re: Интересная задача   Poloviy Vitaliy   04 Oct 2001 16:47:25 
 Re[2]: Интересная задача   Oleg Shmidt   04 Oct 2001 17:59:28 
 Re: Интересная задача   Vladimir Panasenia   04 Oct 2001 22:33:54 
 Re: Интересная задача   Andrey Tarasevich   05 Oct 2001 20:18:33 
 Интересная задача   George Shepelev   05 Oct 2001 22:39:16 
 Интересная задача   Max Alekseyev   04 Oct 2001 11:58:16 
 Re: Интересная задача   Serge Kanilo   04 Oct 2001 23:47:59 
 Интеpесная задача   Sergey Kruk   04 Oct 2001 20:28:38 
 Re: Интеpесная задача   Andrey Tarasevich   05 Oct 2001 02:41:39 
 Re: Интеpесная задача   Andrew Ezhguroff   05 Oct 2001 03:02:06 
 Re: Интеpесная задача   Elia Kosharsky   06 Oct 2001 15:49:47 
 Интересная задача   Vladimir Namkhoev   05 Oct 2001 14:23:09 
 Re: Интересная задача   Andrey Tarasevich   05 Oct 2001 20:16:29 
 Интересная задача   Vladimir Namkhoev   06 Oct 2001 22:36:53 
 Интересная задача   Aleksey Malov   05 Oct 2001 23:51:58 
 Re: Интересная задача   Comoderator Of Ru Algorithms   06 Oct 2001 18:27:58 
 Re^2: Интересная задача   Comoderator Of Ru Algorithms   10 Oct 2001 17:30:06 
 Re: Интересная задача   Andrey Dashkovsky   04 Oct 2001 17:05:01 
 Интеpесная задача   George Tarasov   10 Oct 2001 17:20:12 
 Re: Интеpесная задача   Andrew Ezhguroff   11 Oct 2001 14:25:01 
Архивное /ru.algorithms/21067491a3e60.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional