#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; } |
English