Procedure sovp; var i, j, r, c: byte; ar: array[1..10, 1..10]of byte; s: array[1..4] of string; b: boolean; label l1; begin r := random(2, 3); l1: c := 1; b := false; for i := 1 to 10 do for j := 1 to 10 do begin ar[i, j] := random(0, 1); if(i < 5) then s[i] := ''; end; for i := 1 to 9 do begin for j := 1 to 10 do begin if(ar[i, j] <> ar[i + 1, j]) then b := true; end; if(b = false) then begin s[c] := i + ' строка совпалает с ' + (i + 1) + ' строкой'; c := c + 1; end; b := false; end; if(c <> r) then goto l1 else begin for var k := 1 to c do if(k<>c)then writeln(s[k]); for i := 1 to 10 do begin for j := 1 to 10 do write(ar[i, j], ' '); writeln; end; end; end; begin sovp; end.
ответ: 22 Вариант на C++, но программа долго выполняется; как оптимизировать, я пока не знаю.
#include <iostream> #include <sstream> #include <string> int main() { int k = 0; //счетчик 1016палиндромов
for (int i = 16; i <= 10000000; i++) { int temp = i;
std::stringstream ss; //перевод 10чного числа в 16чную строку ss << std::hex << temp; std::string temp16(ss.str());
//проверяем, является ли 16чное число палиндромом bool t16 = true; int left_index = 0; int right_index = temp16.size() - 1; while (left_index < right_index) if (temp16[left_index++] != temp16[right_index--]) t16 = false;
if (t16) { bool t10 = true; std::ostringstream ost; //перевод 10чного числа в строку ost << temp; std::string temp10 = ost.str();
//проверяем, является ли 10чное число палиндромом int left_index = 0; int right_index = temp10.size() - 1; while (left_index < right_index) if (temp10[left_index++] != temp10[right_index--]) t10 = false;
if (t10) k = k + 1; } }
std::cout << "Number of 1016-palindroms: " << k << std::endl; return 0; }
управление по-моему