Aid1 - Уровень А Выполните программу на ком- пьютере. Какие действия были выполнены? в программе Scratch можно выбрать несколько костюмов, Обу ясните причину. 1 - 11 с Уровень в Создайте в программе персонаж и его анимацию, как на рисунках,
Шупашкар Чăваш Республикин тĕп хули. Шупашкарта пĕтĕмпе 460,2 пин çын (2002 çулхи халăх çыравĕ тăрăх) пурăнать. Шупашкар Чулхулапа Хусан хулисем хушшинче, Атăл юханшывăн сылтăм çыранĕнче вырнаçнă. Шупашкар виçĕ района пайланать: Калинин районĕ, Ленин районĕ, Мускав районĕ тата Атăл лешьенчи çĕр тытăмĕ. Шупашкартан инçех мар хула-спутникĕ Çĕнĕ Шупашкар вырнаçнă. Унта пĕтĕмпе 125 пин çын пурăнать. Шупашкар кунĕ: çурла уйăхĕн виççĕмĕш вырсарникунĕ. Шупашкар хулинчен аякрах мар Атăл тăрăх кайсан Çĕнĕ Шупашкар, Сĕнтĕрвăрри, Куславкка хулисем вырнаçнă.
/*задача дурацкая для n > 3, ибо не понятно, что делать: 1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать. 2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему 3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1. Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...) В общем, решил делать как во втором пункте. ответ в любом случае будет верным.*/ #include <iostream> using namespace std; int n, result = 0; int **ar;//указатель на указатель для создания динамического двумерного массива bool *Flag;//указатель на первый элемент массива флагов void create(int n)//создание динамического массива { ar = new int*[n]; for (int i = 0; i < n; i++) ar[i] = new int[n]; Flag = new bool[n]; for (int i = 0; i < n; i++) Flag[i] = false; } void inp(int n) //ввод элементов массива { cout << "Input rows of matrix:\n"; for (int i = 0; i < n; i++) { cout << i + 1 << ": "; for (int j = 0; j < n; j++) cin >> ar[i][j]; } } void outp(int n) //вывод элементов массива { cout << "Elements of matrix:\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << ar[i][j] << " "; cout << endl; } } bool isEqual(int n, int j1, int j2)//проверка на равенство столбцов { bool res = true; for (int i = 0; i < n; i++) { if (ar[i][j1] != ar[i][j2]) { res = false; break; } } if (res)//если столбцы равны Flag[j2] = true; /*отмечаем столбец как просмотренный, чтобы в следующий раз его не сравнивать с другими столбцами*/ return res; } void calculate(int n)//считаем количество совпадающих столбцов { int k = 1; for (int j1 = 0; j1 < n; j1++) if (!Flag[j1]) { k = 1; for (int j2 = j1 + 1; j2 < n; j2++) if (!Flag[j2] && isEqual(n, j1, j2)) k++; if (k > 1)//имеется k одинаковых стобцов по типу столбца j1 result += k;//плюсует к итоговому результату } } int main(){ cout << "Input n: "; cin >> n; create(n); inp(n);//ввод массива outp(n);//вывод массива calculate(n);//расчет того, что требуется if (result > 0)/*количество столбцов, которые совпадают, по крайней мере, с одним из других столбцов*/ cout << "The number of columns, coinciding with at least one other column, is " << result << endl; else //все столбцы разные cout << "There is no matching columns\n"; return 0; }
1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать.
2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему
3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1.
Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...)
В общем, решил делать как во втором пункте. ответ в любом случае будет верным.*/
#include <iostream>
using namespace std;
int n, result = 0;
int **ar;//указатель на указатель для создания динамического двумерного массива
bool *Flag;//указатель на первый элемент массива флагов
void create(int n)//создание динамического массива
{
ar = new int*[n];
for (int i = 0; i < n; i++)
ar[i] = new int[n];
Flag = new bool[n];
for (int i = 0; i < n; i++)
Flag[i] = false;
}
void inp(int n) //ввод элементов массива
{
cout << "Input rows of matrix:\n";
for (int i = 0; i < n; i++)
{
cout << i + 1 << ": ";
for (int j = 0; j < n; j++)
cin >> ar[i][j];
}
}
void outp(int n) //вывод элементов массива
{
cout << "Elements of matrix:\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << ar[i][j] << " ";
cout << endl;
}
}
bool isEqual(int n, int j1, int j2)//проверка на равенство столбцов
{
bool res = true;
for (int i = 0; i < n; i++)
{
if (ar[i][j1] != ar[i][j2])
{
res = false;
break;
}
}
if (res)//если столбцы равны
Flag[j2] = true; /*отмечаем столбец как просмотренный, чтобы в следующий раз его не сравнивать с другими столбцами*/
return res;
}
void calculate(int n)//считаем количество совпадающих столбцов
{
int k = 1;
for (int j1 = 0; j1 < n; j1++)
if (!Flag[j1])
{
k = 1;
for (int j2 = j1 + 1; j2 < n; j2++)
if (!Flag[j2] && isEqual(n, j1, j2))
k++;
if (k > 1)//имеется k одинаковых стобцов по типу столбца j1
result += k;//плюсует к итоговому результату
}
}
int main(){
cout << "Input n: ";
cin >> n;
create(n);
inp(n);//ввод массива
outp(n);//вывод массива
calculate(n);//расчет того, что требуется
if (result > 0)/*количество столбцов, которые совпадают, по крайней мере, с одним из других столбцов*/
cout << "The number of columns, coinciding with at least one other column, is " << result << endl;
else //все столбцы разные
cout << "There is no matching columns\n";
return 0;
}