#include "cielib.h" using namespace std; int maxValue[500]; int minValue[500]; int average[500]; void CheckPosition(int wymiar, int distance) { int lenght = maxValue[wymiar] - minValue[wymiar]; int averageWymiaru = average[wymiar]; average[wymiar] = minValue[wymiar]; czyCieplo(average); average[wymiar] = maxValue[wymiar]; if (lenght%2 == 0) { if (czyCieplo(average) == 1) minValue[wymiar] = averageWymiaru + 1; else { average[wymiar] = minValue[wymiar]; if (czyCieplo(average) == 1) //zimno-ciepło maxValue[wymiar] = averageWymiaru - 1; else //zimno-zimno minValue[wymiar] = maxValue[wymiar] = averageWymiaru; } } else { if (czyCieplo(average) == 1) minValue[wymiar] = averageWymiaru + 1; else { average[wymiar] = minValue[wymiar]; if (czyCieplo(average) == 1) //zimno-ciepło maxValue[wymiar] = averageWymiaru; else //zimno-zimno { minValue[wymiar] = averageWymiaru; maxValue[wymiar] = averageWymiaru + 1; } } } average[wymiar] = averageWymiaru; } int Distance(int iloscWymiarow) { int maxDistance = maxValue[0] - minValue[0]; for (int i=1; i<iloscWymiarow; i++) { int a = maxValue[i] - minValue[i]; if (maxDistance < a) maxDistance = a; } return maxDistance; } void IncreaseDistance(int wymiar) { int a = maxValue[wymiar] - minValue[wymiar]; if (a == 1) { if (minValue[wymiar] > 0) minValue[wymiar] = minValue[wymiar] - 1; else maxValue[wymiar] = maxValue[wymiar] + 1; } } void countAverage(int iloscWymiarow) { for (int i=0; i<iloscWymiarow; i++) { average[i] = (minValue[i] + maxValue[i])/2; } } int main() { int iloscWymiarow = podajD(); for (int i=0; i<iloscWymiarow; i++) { maxValue[i] = podajR(); } for (;Distance(iloscWymiarow) != 0;) { int distance = Distance(iloscWymiarow); for (int i=0; i<iloscWymiarow; i++) { if (distance == 1) IncreaseDistance(i); } countAverage(iloscWymiarow); for (int i=0; i<iloscWymiarow; i++) { CheckPosition(i,distance); } } znalazlem(maxValue); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include "cielib.h" using namespace std; int maxValue[500]; int minValue[500]; int average[500]; void CheckPosition(int wymiar, int distance) { int lenght = maxValue[wymiar] - minValue[wymiar]; int averageWymiaru = average[wymiar]; average[wymiar] = minValue[wymiar]; czyCieplo(average); average[wymiar] = maxValue[wymiar]; if (lenght%2 == 0) { if (czyCieplo(average) == 1) minValue[wymiar] = averageWymiaru + 1; else { average[wymiar] = minValue[wymiar]; if (czyCieplo(average) == 1) //zimno-ciepło maxValue[wymiar] = averageWymiaru - 1; else //zimno-zimno minValue[wymiar] = maxValue[wymiar] = averageWymiaru; } } else { if (czyCieplo(average) == 1) minValue[wymiar] = averageWymiaru + 1; else { average[wymiar] = minValue[wymiar]; if (czyCieplo(average) == 1) //zimno-ciepło maxValue[wymiar] = averageWymiaru; else //zimno-zimno { minValue[wymiar] = averageWymiaru; maxValue[wymiar] = averageWymiaru + 1; } } } average[wymiar] = averageWymiaru; } int Distance(int iloscWymiarow) { int maxDistance = maxValue[0] - minValue[0]; for (int i=1; i<iloscWymiarow; i++) { int a = maxValue[i] - minValue[i]; if (maxDistance < a) maxDistance = a; } return maxDistance; } void IncreaseDistance(int wymiar) { int a = maxValue[wymiar] - minValue[wymiar]; if (a == 1) { if (minValue[wymiar] > 0) minValue[wymiar] = minValue[wymiar] - 1; else maxValue[wymiar] = maxValue[wymiar] + 1; } } void countAverage(int iloscWymiarow) { for (int i=0; i<iloscWymiarow; i++) { average[i] = (minValue[i] + maxValue[i])/2; } } int main() { int iloscWymiarow = podajD(); for (int i=0; i<iloscWymiarow; i++) { maxValue[i] = podajR(); } for (;Distance(iloscWymiarow) != 0;) { int distance = Distance(iloscWymiarow); for (int i=0; i<iloscWymiarow; i++) { if (distance == 1) IncreaseDistance(i); } countAverage(iloscWymiarow); for (int i=0; i<iloscWymiarow; i++) { CheckPosition(i,distance); } } znalazlem(maxValue); return 0; } |