Курсова работа
по
Компютърна евристика
преподаватели:
1. гл. ас. Таня Тонова
2. доц. И. Тонов
изготвила:
Даниела Василева Рангелова фн. 13252
гр. София
2008 г.
Решение на задачата: “eat * me = alive”
Имаме следните цифри:
1. “e” (Повтаря се 3 пъти)
2. “a” (Повтаря се 2 пъти)
3. “t”, “m”, “l”, “i”, “v” (повтарят се само по един път).
Знаем още, че всички цифри са различни e ≠ a ≠ t ≠ m ≠ l ≠ i ≠ v.
Вземаме най-голямото възможно число и проверяваме:
999 . 99 = 98 901 не, отпадат възможности ‘е’ може да е 19
Вземаме най-малкото възможно число и проверяваме:
100. 10 = 1000 → получава се 4 цифрено число, а трябва да е 5 цифрено.
Забелязваме още, че:
1. е ≠ 0 → защото eat ще стане двуцифрено число. Аналогично и m, a ≠ 0
2. е ≠ 1, защотo t*е = t, a произведението t.e завършва на e
Възможни двойки за е и t:
e =
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
t =
|
6
|
1
|
1
|
6
|
1
|
3
|
7
|
9
|
1
|
1
|
1
|
6
|
1
|
Започваме изчерпване по а:
-
а = 1 е = 2, t = 6 (1)
е = 3, t = 1 → отпада, защото а = 1 и t = 1 а = t, което е противоречие
е = 4, t = 1 → не
е = 4, t = 6 (2)
е = 5, t = 1 → не
е = 5, t = 3 (3)
е = 5, t = 7 (4)
е = 5, t = 9 (5)
е = 6, t = 1 → не
е = 7, t = 1 → не
е = 8, t = 1 → не
е = 8, t = 6 (6)
е = 9, t = 1 → не
-
216 . m2 = 1liv2
m = 3 → 216 . 32 = 6912 → не
m = 4 → не, малко число е
m = 5 → 216 . 52 = 11232 → не
m = 6 → не, (t = 6)
m = 7 → 216 . 72 = 15552 → не
m = 8 → 216 . 82 = 17712 → не
m = 9 → 216 . 92 = 19872 → не
-
416 . m4 = 1liv4
m = 1 → не ≠ a
m = 2 → не, малко число
m = 3 → 416 . 34 = 14144 → не
m = 4 → не ≠ e
m = 5 → 416 . 54 = 22464 → голямо число m ≥ 5 не е решение
-
513 . m5 = 1liv5
m = 1 → не ≠ a
m = 2 → 513 . 25 = 12825 не
m = 3 → не ≠ t
m = 4 → 513 . 45 = 23085 → голямо число m ≥ 4 не е решение
-
517 . m5 = 1liv5
m = 1 → не
m = 2 → 517 . 25 = 12925 не
m = 3 → 517 . 35 = 18095 → да 1 реш.
m = 4 → 517 . 45 = 23265 не, голямо число m ≥ 4 не е решение
-
519 . m5 = 1liv5
m = 2 → 519 . 25 = 12975
m = 3 → 519 . 35 = 18165
m = 4 → 519 . 45 = 23355 не, голямо число m ≥ 4 не е решение
-
816 . m8 = 1liv8
m = 2 → 816 . 28 = 22848 не, голямо число m ≥ 2 не е решение
-
a = 2 е = 3, t = 1 (1)
e = 4, t = 1 (2)
e = 4, t = 6 (3)
e = 5, t = 1 (4)
e = 5, t = 3 (5)
e = 5, t = 7 (6)
e = 5, t = 9 (7)
e = 6, t = 1 (8)
e = 7, t = 1 (9)
e = 8, t = 1 (10)
e = 8, t = 6 (11)
e = 9, t = 1 (12)
-
e = 3, a = 2, t = 1
321 . m3 = 2liv3
m = 4 → 321 . 43 = 13803
m = 5 → 321 . 53 = 17013, не
m = 6 → 321 . 63 = 20223, не
m = 7 → 321 . 73 = 23433, не
m = 8 → 321 . 83 = 26643, не
m = 9 → 321 . 93 = 29853, не
-
421 . m4 = 2liv4
m = 3 → 421 . 34 = 14314, не
m = 4 → не
m = 5 → 421 . 54 = 22734, не
m = 6 → 421 . 64 = 26944, не
m = 7 → 421 . 74 = 31154, не, голямо число m ≥ 7 не е решение
-
426 . m4 = 2liv4
m = 1 → 426 . 14 = 5964 – не
m = 3 → 426 . 34 = 14484 – не
m = 5 → 426 . 54 = 23004 – не
m = 7 → 426 . 74 = 31524, не, голямо число m ≥ 7 не е решение
-
521 . m5 = 2liv5
m = 3 → 521 . 35 = 18235, не
m = 4 → 521 . 45 = 23445, не
m = 6 → 521 . 64 = 33865, не, голямо число m ≥ 6 не е решение
-
523 . m5 = 2liv5
m = 1 → 523 . 15 = 7845, не
m = 4 → 523 . 45 = 23535, не
m = 6 → 523 . 65 = 33995, не, голямо число m ≥ 6 не е решение
-
527 . m5 = 2liv5
m = 1 → 527 . 15 = малко, не
m = 3 → 527 . 35 = малко, не
m = 4 → 527 . 45 = 23715, не
m = 6 → 527 . 65 = 34255, не, голямо число m ≥ 6 не е решение
-
529 . m5 = 2liv5
m = 1 → 529 . 15 = малко, не
m = 3 → 529 . 35 = 19515, не
m = 4 → 529 . 45 = 23805 да 2 реш.
м = 6 → 529 . 65 = 34385, не, голямо число m ≥ 6 не е решение
-
621 . m6 = 2liv6
m = 1 → 621 → не t =1 = m, противоречие
m = 3 → 621 . 36 = 22356
m = 4 → 621 . 46 = 28566
m = 5 → 621 . 56 = 14776, не, голямо число m ≥ 5 не е решение
-
721 . m7 = 2liv7
m = 1 → малко
m = 3 → 721 . 37 = 26677
m = 4 → 721 . 47 = 33887 не, голямо число m ≥ 4 не е решение
-
821 . m8 = 2lib8
m = 1 → малко
m = 3 → 821 . 38 = 31198 не, голямо число m ≥ 3 не е решение
-
826 . m8 = 2lib8
m = 1 → малко
m = 3 → 826 . 38 = 31388 не, голямо число m ≥ 3 не е решение
-
921 . m9 = 2lib9
m = 1 → не е ≠ t
m = 3 → 921 . 39 = 35919 не, голямо число m ≥ 3 не е решение
III. a = 3 e = 2, t = 6 (1)
e = 4, t = 1 (2)
e = 4, t = 6 (3)
e = 5, t = 1 (4)
e = 5, t = 7 (5)
e = 5, t = 9 (6)
e = 6, t = 1 (7)
e = 7, t = 1 (8)
e = 8, t = 1 (9)
e = 8, t = 6 (10)
e = 9, t = 1 (11)
-
236 . m2 = 3liv2
m = 1 → 236 . 12 → малко
m = 4 → 236 . 42 = 39312, не
m = 5 → 236 . 52 = 12272, не
m = 9 → 239 . 93 = 21712, не
-
431 . m4 = 3liv4
m = 2 → 431 . 24 = 10344, не
m = 5 → 431 . 54 = 23774, не
m = 6 → 431 . 64 = 27584, не
m = 7 → 431 . 74 = 31894, не
m = 8 → 431 . 84 = 36204 3-то решение
m = 9 → 431 . 94 = 40514, не
-
436 . m4 = 3liv4
m = 1 → малко
m = 9 → 436 . 94 = 40984 , не
m = 8 → 436 . 84 = 36624 , не
m = 7 → 436 . 74 = 32264 , не
m = 5 → 436.54 = 23544 → малко → m ≤ 5 не е решение
-
531 . m5 = 3liv5
m = 2 → 531 . 25 = 13275, не
m = 4 → 531 . 45 = 23895 , не
m = 6 → 531 . 65 = 34515 , не
m = 7 → 531 . 75 = 39825, да 4-то решение
m = 8, 9 → големи числа
-
537 . m5 = 3liv5
m = 9 → 537 . 95 = 51015, не
m = 8 → 537 . 85 = 45645, не
m = 6 → 537 . 65 = 34905 – да 5-то решение
m = 4 → 537 . 45 = 24165 – малко число m ≤ 4 не е решение
-
539 . m5 = 3liv5
m = 1, 2, 3 – малки числа
m = 4 → 539 . 45 = 24255 , не
m = 6 → 539 . 65 = 35035 , не
m = 7 → 539 . 75 = 40425 , не, голямо число m ≥ 7 не е решение
-
631 . m6 = 3liv6
m = 2 →631 . 26 = 16406 , не
m = 4 →631 . 46 = 29026 , не
m = 5 →631 . 56 = 35336 , не
m = 7 → голямо число m ≥ 7 не е решение
-
731 . m7 = 3liv7
m = 2 →731 . 27 = 19737 , не
m = 4 →731 . 47 = 34357 , не
m = 5 →731 . 57 = 41667 , не, голямо число m ≥ 5 не е решение
-
831 . m8 = 3liv8
m = 2 → 831 . 28 = 23268 , не
m = 4 → 831 . 48 = 39888 , не
m = 5 → голямо число m ≥ 5 не е решение
-
836 . m8 = 3liv8
m = 2 → 836 . 28 = 23408 , не
m = 4 → 836 . 48 = 40128 , голямо число m ≥ 4 не е решение
-
931 . m9 = 3liv9
m = 3 → 931 . 29 = 26999 , не
m = 4 → 931 . 49 = 45619, голямо число m ≥ 4 не е решение
IV. a = 4 e = 2, t = 6 (1)
e = 3, t = 1 (2)
e = 5, t = 1,3,7,9 (3)
e = 6, t = 1 (4)
e = 7, t = 1 (5)
e = 8, t = 1,6 (6)
e = 9, t = 1 (7)
-
246 . m2 = 4liv2
m=9 → 246 . 92 = 22632, малко число m ≤ 9 не е решение
(2) 341 . m3 = 4liv3
m=9 → 341 . 93 = 31713, малко число m ≤ 9 не е решение
(3.1) 541 . m5 = 4liv5
m = 7 → 541 . 75 = 40575 , не
m = 8 → 541 . 85 = 45985 , не
m = 9 → 541 . 95 = 51395 , много голямо число m ≥ 9 не е решение
-
543 . m5 = 4liv5
m = 7 → 543 . 75 = 40725 , не
m = 8 → 543 . 85 = 46155 , не
m = 9 → 543 . 95 = 51585 , много голямо число m ≥ 9 не е решение
-
547 . m5 = 4liv5
m = 8 → 547 . 85 = 46495 , не
m = 9 → 547 . 95 = 51965 , много голямо число m ≥ 9 не е решение
-
549 . m5 = 4liv5
m = 7 → 549 . 75 = 41175 , не
m = 8 → 549 . 85 = 46665 , не
-
641 . m6 = 4liv6
m = 7 → 641 . 76 = 48716 , не
m = 8 → 641 . 86 = 45126 , не
m = 9 → 641 . 96 = 61536 , много голямо число m ≥ 9 не е решение
-
741 . m7 = 4liv7
m = 6 → 741 . 67 = 49647 – да 6-то решение
m = 8 → 741 . 87 = 64467, много голямо число m ≥ 8 не е решение
-
841 . m8 = 4liv8
m = 3 → 841 . 38 = 31958 , малко число m ≤ 3 не е решение
m = 5 → 841 . 58 = 48778 , не
m = 6 → 841 . 68 = 57188 , много голямо число m ≥ 6 не е решение
-
846 . m8 = 4liv8
m = 5 → 846 . 58 = 49068 , не
m = 7 → 846 . 78 = 65988 , много голямо число m ≥ 7 не е решение
(7) 941 . m9 = 4liv9
m = 3 → 941 . 39 = 36699 , малко число m ≤ 3 не е решение
m = 5 → 941 . 59 = 55519 , много голямо число m ≥ 5 не е решение
V. a = 5 e = 2, t = 6 (1)
e = 3, t = 1 (2)
e = 4, t = 1,6 (3)
e = 6, t = 1 (4)
e = 7, t = 1 (5)
e = 8, t = 1,6 (6)
e = 9, t = 1 (7)
-
256 . m2 = 5liv2
m = 9 → 256 . 92 = 23552 , не
-
351 . m3 = 5liv3 – няма решение
(3.1) 451 . m4 = 5liv4
m = 9 → 451 . 94 = 42394 , не
-
456 . m4 = 5liv4 – няма решение
m = 9 → 456 . 94 = 42864 , не
(4) 651 . m6 = 5liv6
m = 8 → 651 . 86 = 55986 , не
m = 9 → 651 . 96 = 62496 , много голямо число m ≥ 9 не е решение
-
751 . m7 = 5liv7
m = 6 → 751 . 67 = 50317 , не
m = 8 → 751 . 87 = 65337 , много голямо число m ≥ 8 не е решение
(6.1) 851 . m8 = 5liv8
m = 4 → 851 . 48 = 40848 , малко число m ≤ 4 не е решение
m = 6 → 851 . 68 = 57868 , не
m = 7 → 851 . 78 = 66378 , много голямо число m ≥ 7 не е решение
(6.2) 856. m8 = 5liv8
m = 7 → 856 . 78 = 66768 , много голямо число m ≥ 7 не е решение
-
951 . m9 = 5liv9
m = 4 → 951 . 49 = 46599 , малко число m ≤ 4 не е решение
m = 6 → 951 . 69 = 65619 , много голямо число m ≥ 6 не е решение
VI. a = 6 e = 3, t = 1 (1)
e = 4, t = 1 (2)
e = 5, t = 1,3,7,9 (3)
e = 7, t = 1 (4)
e = 8, t = 1 (5)
e = 9, t = 1,6 (6)
(1) 361 . m3 = 6liv3
m = 9 → 361 . 93 = 33573 , много малко число m ≤ 9 не е решение
(2) 461 . m4 = 6liv4
m = 9 → 461 . 94 = 43334 , много малко число m ≤ 9 не е решение
(3.1) 561 . m5 = 6liv5
m = 8 → 561 . 85 = 47658 , много малко число m ≤ 8 не е решение
m = 9 → 561 . 95 = 53295 , малко число m ≤ 9 не е решение
(3.2) 563 . m5 = 6liv5
m = 8 → 563 . 85 = 47855 , малко число m ≤ 8 не е решение
m = 9 → 563 . 95 = 53485 , малко число m ≤ 9 не е решение
(3.3) 567 . m5 = 6liv5
m = 9 → 567 . 95 = 53865 , малко число m ≤ 9 не е решение
(3.4) 569 . m5 = 6liv5
m = 9 → 569 . 95 = 54055 , малко число m ≤ 9 не е решение
(4) 761 . m7 = 6liv7
m = 8 → 761. 87 = 66207 , не
m = 9 → 761 .97 = 74817 , голямо число m ≥ 9 не е решение
(5) 861 . m8 = 6liv8
m = 7 → 861. 78 = 67158 , не
m = 9 → 861 .98 = 84378 , голямо число m ≥ 9 не е решение
(6) 961 . m9 = 6liv9
m = 5 → 961. 59 = 56699 , малко число m ≤ 5 не е решение
m = 7 → 961 .79 = 75919 , голямо число m ≥ 7 не е решение
VII. a = 7 e = 8, t = 1,6 (1)
e = 6, t = 1 (2)
e = 9, t = 1 (3)
(1.1) 871 . m8 = 7liv8
m = 9 → 871 .98 = 86158 , голямо число m ≥ 9 не е решение
(1.2) 876 . m8 = 7liv8
m = 9 → 876 .98 = 85848 , голямо число m ≥ 9 не е решение
(2) 671 . m6 = 7liv6
m = 9 → 671 .96 = 65016 , малко число m ≤ 9 не е решение
(3) 971 . m9 = 7liv9
m = 6→ 971 .69 = 66999 , не
m = 8→ 971 .89 = 86419 , голямо число m ≥ 8 не е решение
VIII. a = 8e = 9, t = 1 (1)
e = 7, t = 1 (2)
(1) 981 . m9 = 8liv9
m = 7 → 981 .79 = 77499 , малко число m ≤ 7 не е решение
(2) 781 . m7 = 8liv7
m = 9→ 781 .97 = 75757 , малко число m ≤ 9 не е решени
Втори начин за решаване на задачата чрез компютърна програма – итеративно пробване на всички възможни стойности на числата e,a, t, m, l, i, v:
int main(int argc, char* argv[])
{
FILE *ResultFile; //създаване на структура за работа с файл
int e,a,t,m,l,i,v, eat, me, alive, NumberResult; // деклариране на променливи
ResultFile = NULL; //инициализация на структирата FILE. Указва невалидни данни
ResultFile = fopen("Result.txt","wt"); //създава и отваря текстов файл Result.txt за писане
if(ResultFile == NULL) // проверка дали е създаден този файл
{
printf("Cannot create Result.txt file"); // ако не – изписва грешка
}
else
{
eat = 0; // начално строиности на променливите
me = 0;
alive = 0;
NumberResult = 0;
printf("Find all the possible solutions of: eat*me = alive!\n"); // съобщение поясняващо целта на програмата
for(e = 1; e < 10; e++) //вграден цикъл на 7 нива, който пробва всички възможни комбинации на числата.
{
printf("->%d\r\n",e); // съобщение до къде е стигнала програмата.
for(a = 1; a < 10; a++)
for(t = 0; t < 10; t++)
for(m = 1; m < 10; m++)
for(l = 0; l < 10; l++)
for(i = 0; i < 10; i++)
for(v = 0; v < 10; v++)
{
eat = ((100*e) + (10*a) + t ); // изчисляване на стойността на eat
me = ((10*m) + e) ; // изчисляване на стойността на me
alive = ((10000*a)+(1000*l)+(100*i)+(10*v) + e ); // изчисляване на стойността на alive
// проверка дали всикчи условия на задата са изпълнени
if( (eat * me == alive) &&
(e!=a) && (e!=t)&& (e!=m)&& (e!=l)&& (e!=i)&& (e!=v) &&
(a!=t)&& (a!=m)&& (a!=l)&& (a!=i)&& (a!=v) &&
(t!=m)&& (t!=l)&& (t!=i)&& (t!=v) &&
(m!=l)&& (m!=i)&& (m!=v) &&
(l!=i)&& (l!=v) &&
(i!=v)
)
{
NumberResult++; // брояч - показва колко решения има задачата
printf("A possible result of (e,a,t,m,l,i,v) is: [%d , %d , %d , %d , %d , %d , %d]\r\n",e,a,t,m,l,i,v); // изписва резултата върху екрана
fprintf(ResultFile,"%d:A possible result of (e,a,t,m,l,i,v) is: [%d , %d , %d , %d , %d , %d , %d]\r\n",NumberResult,e,a,t,m,l,i,v); // записва резултата във файла Result.txt
}
}
}
}
fclose(ResultFile); // записва и затваря файла Result.txt
return 0;
}
Резултат от изпълнението на горната компютърна програма:
1:A possible result of (e,a,t,m,l,i,v) is: [4 , 3 , 1 , 8 , 6 , 2 , 0]
2:A possible result of (e,a,t,m,l,i,v) is: [5 , 1 , 7 , 3 , 8 , 0 , 9]
3:A possible result of (e,a,t,m,l,i,v) is: [5 , 2 , 9 , 4 , 3 , 8 , 0]
4:A possible result of (e,a,t,m,l,i,v) is: [5 , 3 , 1 , 7 , 9 , 8 , 2]
5:A possible result of (e,a,t,m,l,i,v) is: [5 , 3 , 7 , 6 , 4 , 9 , 0]
ИЗВОД:
Получаваме същите решения, както от първия начин чрез изчерпване, следователно получените отговори са верни. Вторият начин е по-бърз.
Сподели с приятели: |