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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
| /////////////////////////////////////////////////////////////////////////////////////////
// Школа и дом Петра находятся на одной стороне улицы. Од*нажды по дороге в школу он стал
//складывать номера домов, мимо которых проходил на своей стороне улицы, начиная с номера
//своего дома. Когда сумма номеров оказалась равной
// 99,
//Петр пе*решел через поперечную улицу.
//После этого он начал заново скла*дывать номера домов, мимо которых проходил, и при сумме
// 117
//перешел через еще одну поперечную улицу. Петр и в следующем квартале складывал номера домов.
//Сумма номеров домов третьего квартала оказалась равной
// 235,
//включая номер дома школы.
//Каков номер дома Петра? Каков номер дома школы?
/////////////////////////////////////////////////////////////////////////////////////////
#include <conio.h>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
int const BUILD_NUM_STEP = 2;
/////////////////////////////////////////////////////////////////////////////////////////
bool successfully_completed_block
(
int first_num_in_block,
int block_sum,
int & last_num_in_block
)
{
bool bool_res;
int sum = 0;
for (
int
cur_num = first_num_in_block;
sum <= block_sum;
cur_num += BUILD_NUM_STEP
)
{
sum += cur_num;
bool_res = sum == block_sum;
std::cout << "#"
<< cur_num
<< '\t'
<< "sum = "
<< sum
<< std::endl;
if( bool_res )
{
std::cout << std::endl;
last_num_in_block = cur_num;
break;
}//if
}//for
return bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool successfully_from_3_block_sums_get_Peter_and_school_building_numbers
(
int block_sum_1,
int block_sum_2,
int block_sum_3,
int & Peter_building_number,
int & school_building_number
)
{
bool bool_res = false;
int sum_1 = 0;
int sum_2 = 0;
int sum_3 = 0;
for (
Peter_building_number = 1;
Peter_building_number < block_sum_1;
++Peter_building_number
)
{
int last_num_in_first_block = 0;
int last_num_in_second_block = 0;
std::cout << std::endl
<< std::endl
<< std::endl
<< std::endl
<< "Очередной заход Петра:"
<< std::endl;
bool_res = successfully_completed_block
(
Peter_building_number,
block_sum_1,
last_num_in_first_block
)
&& successfully_completed_block
(
last_num_in_first_block + BUILD_NUM_STEP,
block_sum_2,
last_num_in_second_block
)
&& successfully_completed_block
(
last_num_in_second_block + BUILD_NUM_STEP,
block_sum_3,
school_building_number
);
if( bool_res )
{
break;
}
}//for
return bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
std::locale::global(std::locale(""));
int block_sum_1 = 99;
int block_sum_2 = 117;
int block_sum_3 = 235;
int Peter_building_number = 0;
int school_building_number = 0;
if (
successfully_from_3_block_sums_get_Peter_and_school_building_numbers
(
block_sum_1,
block_sum_2,
block_sum_3,
Peter_building_number,
school_building_number
)
)
{
std::cout << "Петр живет в доме под номером\t\t"
<< Peter_building_number
<< std::endl
<< "Школа находится в доме с номером\t"
<< school_building_number
<< std::endl;
}
else
{
std::cout << "Решение не найдено."
<< std::endl;
}//else
getch();
} |