Циклы в Python: 1. Последовательность из латинских букв строится следующим образом. На первом шаге она пуста. На каждом последующем шаге последовательность удваивается, после чего к ней слева дописывается очередная буква латинского алфавита (а, b, с, ...). Ниже приведены первые шаги построения последовательности:
Шаг 1. пустая последовательность
Шаг 2. а
Шаг 3. baa
Шаг 4. cbaabaa
Шаг 5. dcbaabaacbaabaa
...
Задача состоит в том, чтобы по заданному числу N (1 <= N < 226) определить символ, который стоит на N-ом месте в последовательности, получившейся после 27-го шага (символы отсчитываются слева направо).
В качестве ответа укажите символ, стоящий в позиции N получившейся последовательности.
2. Имеются три пробирки. Вместимость каждой из них — 100 миллилитров. На двух пробирках из трех нанесены одинаковые риски (метки). Третья пробирка — без рисок. Возле каждой риски надписано целое число миллилитров, которое вмещается в пробирку от дна до этой риски.
Изначально одна из пробирок с рисками наполнена 100 миллилитрами кваса, а остальные две — пустые. Требуется написать программу, которая выясняет, можно ли поместить в пробирку без рисок один миллилитр кваса, и если да, то находит минимально необходимое для этого число переливаний. Квас можно переливать из одной пробирки в другую до тех пор, пока либо первая из них не станет пустой, либо одна из пробирок не окажется заполненной до какой-либо риски.
Технические требования:
1. Число рисок не более 10.
2. Риски считаются упорядоченными по возрастанию: V1 < V2 < ... < Vn. Последняя риска считается сделанной на верхнем крае пробирки (Vn = 100).
Исходные данные корректны и их проверка не требуется.
Пример работы правильной программы
Введите число рисок 4
Введите 1-ую риску 13
Введите 2-ую риску 19
Введите 3-ую риску 27
4-я риска принимает значение 100.
Для получения 1 миллилитра необходимо 4 переливания.
Введите число рисок 2
Введите 1-ую риску 10
2-я риска принимает значение 100.
1 миллилитр получить невозможно.
= - 127, максимальное число = + 127
2) Число 1607, ячейка двухбайтовая, один бит под знак, следовательно, под число отводится 15 бит, в двоичном представлении 1607(10) = 11001000111(2), дополняем до 16 бит, старший бит - знаковый - нулевой, так как число положительное
= 0000011001000111(2) - это двоичное представление в двухбайтовой ячейке, чтобы получить шестнадцатиричное представление, разбиваем число справа - налево по 4 бита
0000 0110 0100 0111 и записываем в шестнадцатиричном виде
0111(2) = 7(16) 0100(2) = 4(16) 0110(2) =6(16) 0000(2) = 0(16)
1607(16) = 0647(16) или без старшего не значащего нуля = 647(16)
3) для получения дополнительного кода числа, находят обратное число, или инверсию числа,
для этого каждый бит числа изменяют на противоположный, 1 на 0, 0 на 1
105(10) = 1101001(2) - это и есть дополнительный код числа - 105, т.е. дополнительным кодом
числа (- а) будет число а.
Найдем дополнительный код в однобайтовой ячейке числа 105(10) = 01101001(2),
а) находим обратное 01101001(2) ->(обратное) ->10010110(2)
б) дополнительный код-> обратный код + 1 ->(дополнительный)->10010111(2), а это число - 105
потому, что отрицательные числа представляются в дополнительном коде.
Если для числа - 105 найти дополнительный код, то получим число 105
10010111(2)->(дополнительный)->01101000+1->01101001 = 69(16) = 16*6+9 = 96+9 = 105
#include <stdio.h>
#include <windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int const n=3;
int mas[n][n];
int sum1, sum2;
bool magik;
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
{
printf("mas[%d][%d] = ", i+1, j+1);
scanf("%d",&mas[ i ][ j ]);
}
printf("\nВведенная матрица:\n");
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
printf("%d ",mas[ i ][ j ]);
}
printf("\n");
}
sum1=0;
sum2=0;
for (int i = 0; i<n; i++)
{
sum1 += mas[ i ][ i ];
sum2 += mas[ i ][ n-1-i ];
}
printf("Сумма главной диагонали = %d\n", sum1);
printf("Сумма побочной диагонали = %d\n", sum2);
magik = true;
for (int i=0; i<n; i++)
{
if (sum1==sum2)
{
sum2=0;
for (int j=0; j<n; j++)
{
sum2 += mas[ i ][ j ];
}
} else { magik=false; break; }
}
if (magik==true)
{
for (int i=0; i<n; i++)
{
if (sum1==sum2)
{
sum2=0;
for (int j=0; j<n; j++)
{
sum2 += mas[ j ][ i ];
}
}
else { magik=false; break; }
}
}
if (magik==true)
printf("\nМатрица является магическим квадратом\n");
else
printf("\nМатрица не является магическим квадратом\n");
system("pause");
return 0;
}