Всем тем, кому не понятен язык, 2. циклы 1. найти наименьший делитель натурального числа 2. найти все делители натурального числа 3. найти наибольший делитель натурального числа 4. найти сумму делителей числа 600 и их количество 5. найти все делители чисел 90 и 360 6. найти натуральное число, произведение всех делителей которого =5832 7. найти натуральное число, если оно делится на 3 и 4 и имеет 14 делителей 8. подсчитать количество делителей натурального числа, сформированное гениратором случайных чисел в диапазоне от 1 др 10000 9. составить проагрмму, которая нашла бы в интервале от 1 до 1000 число, с наибольшим количеством делителей 10. найти натуральное число в пределах о 1 до 10000 с максимальной суммой делителей 11. составить программу, которая бы напечатала бы все простые числав диапазоне от n до m, а также подсчитать их количество. n и m ввести с клавиатуры 12. между любыми двумя последовательными простыми числами находится заданное число к ? 13. найти и вывести на экран 5 простых чисел, больших заданного к, вводится с клавиатуры. 14. дано простое число р. найти следущее простое число 15. задано некоторое натуральное число р. найти ближайшее к нему простое число. 16. найти все трехзначные числа , кратные 7, сумма цифр которых также кратно 7. если найденное число нечетное , определить , является ли оно простым 17. составить программу поиска трех простых чисел, предшествующих числу м , вводимый с клавиатуры ( м > = 10). 18. составить программу поиска всех цифр - близнецов, принадлежащих заданному диапазону [m , n] . 19. дано простое число. есть ли у него число - близнец ? 20. определить, является числа находящихся по обе стороны от заданного четного числа с , близнецами . 21. является ли заданное натуральное число совершенным ? 22. составить программу поиска всех пар дружественных чисел , меньших 10000 . 23. определить количество разрядов натурального числа n, заданного пользователем . 24. вычислить сумму цифр натурального числа n. 25. записать заданное число n в обратном порядке. 26. составить программу , которая проверяет , является ли число n, вводимое с клавиатуры , палиндромом . 27. найти и напечатать все натуральные числа , которые при возведении в квадрат палиндром . 28. составить программу , которая проверяет , есть ли среди палиндромов в интервале [ 10..1000000 ] простые числа. 29. составить программу , печатающую все нечетные палиндромы в интервале [ 10..1000000 ] . 30. найти и напечатать все натуральные числа в интервале [ 1..2000 ] , равные сумме кубов своих цифр . 31. найти и напечатать все натуральные числа в интервале [ 1..5000 ], равные кубу суммы своих цифр . 32. найти и напечатать все четырехзначные числа , у которых сумма первых двух цифр равна сумме двух последних . 33. в заданном натуральном числе выбросить цифры 3 и 7, оставив неизменным порядок других цифр . 34. проанализировать все числа из диапазона [ 10..1000 ] и напечатать те из них , в записи которых нет цифр 3 и 7 . 35. найти количество шестизначных чисел, у которых все цифры разные. 36. на интервале от n до k выбрать те числа ,которые содержат ровно 3 одинаковые цифры . пример : 6766 , 5444 , 0060 , 0006 . 37. составить программу вычисления цифрового корня натурального числа , введенного с клавиатуры. вычислить и напечатать цифровые корни совершенных чисел, принадлежащих диапазону от х до у, вводящихся с клавиатуры 38. вычислить и напечатать все числа в диапазоне [ 10..9999 ] , кратные своему цифровому корню . 39. вычислить и напечатать все числа в диапазоне [ 100..99999 ], цифровой корень которых: кратный 3 или 5 является простым числом 40. задано 3 натуральных числа. найти нод наибольшего и наименьшего из них. 41. сколько существует натуральных чисел от 20 до 120 , а не взаимно простых с 30 ? 42. сколько существует натуральных чисел, меньших 100 и взаимно простых с числом 36 ? 43. найти все натуральные числа , меньше заданного натурального м и взаимно простые с ним. 44. составить программу сокращения дробей . 45. сравнить две дроби по величине . 46. составить программу сложения ( вычитания ) двух дробей . 47. составить программу умножения ( деления ) двух дробей .
/*задача дурацкая для 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;
}