Решение задач на С++
Задача A. Четные числа
Выведите (через пробел) все четные числа от a до b (включительно).
- int a, b ;
- cin >> a >> b;
- for ( int i = a; i <= b; i++)
- if (i % 2 == 0)
- cout << i << ‘ ‘ ;
Задача B. Остаток
Вводятся 4 числа: a, b, c и d.
Выведите все числа на отрезке от a до b, дающие остаток c при делении на d.
- int a, b, c, d ;
- cin >> a >> b >> c >> d;
- for ( int i = a ; i <= b ; i++)
- if (i % d == c)
- cout << i << ‘ ‘ ;
Задача C. Квадраты
Выведите все числа на отрезке от a до b, являющиеся полными квадратами.
- int a , b;
- cin >> a >> b ;
- int sqrt_a = ceil(sqrt(a + 0.0));
- int sqrt_b = sqrt(( double )b);
- for ( int i = sqrt_a ; i <= sqrt_b ; i++)
- cout << i*i << " " ;
В этом случае мы рационально движемся от sqrt(a) к sqrt(b), т.к. проверка меньших и больших значений смысла не имеет.
Нужно обратить внимание, что корень от а округляется в большую сторону ceil(sqrt(a + 0.0) перед отправкой в цикл: если а – и есть полный квадрат, то это число также должно быть выведено, однако, если а дает дробный корень, то его целая часть (при приведении к типу int) даст заведомо меньший квадрат, чем значение а. Поэтому мы заранее округляем sqrt(a) до следующего целого числа, дабы избежать выведение лишнего квадрата.
Варинат 2.
Этот вариант реализации менее рациональный, однако более прозрачный. Мы напрямую движемся от а до b c проверкой полноты квадрата каждого из текущих значений.
- int a,b;
- cin>>a>>b;
- for ( int i=a;i<=b;i++)
- <
- int Sqrt = sqrt(( double )i);
- if ( Sqrt*Sqrt == i)
- cout<<i<< ‘ ‘ ;
- >
Задача H. Делители числа
Выведите все натуральные делители числа x в порядке возрастания (включая 1 и само число).
- int x;
- cin >> x;
- for ( int i = 1 ; i <= x ; i++)
- if ( x % i == 0 )
- cout << i << ‘ ‘ ;
Задача I. Количество делителей
Подсчитайте количество натуральных делителей числа x (включая 1 и само число; x <= 30000).
- int x, k = 0;
- cin >> x;
- for ( int i = 1; i <= x; i++)
- if (x % i == 0 )
- k++;
- cout << k;
Задача J. Сумма ста
Вычислите сумму данных 100 натуральных чисел. Вводятся 100 чисел, сумму которых необходимо посчитать.
- int x;
- long long sum = 0;
- for ( int i = 1; i <= 100; i++)
- <
- cin >> x;
- sum += x;
- >
- cout << sum ;
Задача K. Сумма чисел
Вычислите сумму данных N натуральных чисел. Вводится число N, а затем N чисел, сумму которых необходимо вычислить.
- int n, x;
- long long sum = 0;
- cin >> n;
- for ( int i = 1; i <= n; i++)
- <
- cin >> x;
- sum += x;
- >
- cout << sum ;
Задача M. Нули
Вводится число N, а затем N чисел. Подсчитайте, сколько среди данных N чисел нулей.
- int n , x , k = 0;
- cin >> n;
- for ( int i = 1; i <= n ; i++)
- <
- cin >> x;
- if (x == 0)
- k++;
- >
- cout << k;
Задача N. Подсчет чисел
Подсчитайте, сколько среди данных N чисел нулей, положительных чисел, отрицательных чисел. Вводится число N, а затем N чисел. Необходимо вывести сначала число нулей, затем число положительных и отрицательных чисел.
- int n, x;
- int zero = 0, pos = 0, neg = 0;
- cin >> n;
- for ( int i = 1; i <= n ; i++)
- <
- cin >> x;
- if (x == 0) zero++;
- else if (x > 0) pos++;
- else neg++;
- >
- cout<<zero<< ‘ ‘ <<pos<< ‘ ‘ <<neg;
При данной реализации мы каждый раз в цикле прогоняем последовательную проверку числа на знак. Сейчас это не доставляет никаких неудобств, т.к. мы имеем всего 3 критерия подсчета. Однако, если б требовалась более широкая проверка, например, относительно 10-ти различных случаев, то рациональнее было бы использовать сase–структуру. Что и сделано в варианте 2
Вариант 2.
Используем сase–структуру для определения знака, предварительно нормировав ненулевые значения в единицу (1/-1).
- int n, x;
- int zero = 0, pos = 0, neg = 0;
- cin >> n;
- for ( int i = 1; i <= n ; i++)
- <
- cin >> x;
- if (x)
- x /= abs(x);
- switch (x)
- <
- case 1: pos++; break ;
- case 0: zero++; break ;
- case -1: neg++; break ;
- >
- >
- cout<<zero<< ‘ ‘ <<pos<< ‘ ‘ <<neg;
Задача O. Ноль или не ноль
Проверьте, есть ли среди данных N чисел нули. Вводится число N, а затем N чисел. Выведите YES, если среди введенных чисел есть хотя бы один нуль, или NO в противном случае.
- int x, n;
- cin >> n;
- bool zeroExist = false ;
- for ( int i = 1; i <= n ; i++)
- <
- cin >> x;
- if (x == 0)
- <
- zeroExist = true ;
- break ;
- >
- >
- if (zeroExist)
- cout<< "YES" ;
- else
- cout << "NO" ;
Вариант 2.
Ту же самую идею можно описать короче.
- int x, n;
- cin >> n;
- bool zeroExist = false ;
- for ( int i = 1; i <= n ; i++)
- <
- cin >> x;
- zeroExist = zeroExist | (x == 0);
- if (zeroExist)
- break ;
- >
- cout<<(zeroExist ? "YES" : "NO" );
Задача P. Уравнение по возрастанию
Вводятся 4 числа: a, b, c и d.
Найдите все целые решения уравнения ax 3 + bx 2 + cx + d = 0 на отрезке [0,1000] и выведите их в порядке возрастания.
- long long a , b , c , d ;
- cin >> a >> b >> c >> d;
- for ( int i = 0; i <= 1000 ; i++)
- if ( a*i*i*i + b*i*i + c*i + d == 0)
- cout<< i << ‘ ‘ ;
Задача Q. Уравнение по убыванию
Вводятся 4 числа: a, b, c и d.
Найдите все целые решения уравнения ax 3 + bx 2 + cx + d = 0 на отрезке [0,1000] и выведите их в порядке убывания.
- long long a, b, c, d;
- cin >> a >> b >> c >> d;
- for ( int i = 1000; i >= 0; i—)
- if (a*i*i*i + b*i*i + c*i + d == 0)
- cout << i << ‘ ‘ ;
Задача R. Количество решений
Вводятся 5 чисел: a, b, c, d и e.
Найдите все целые решения уравнения ( ax 3 + bx 2 + cx + d ) / ( x — e ) = 0 на отрезке [0,1000] и выведите их количество.
- long long a, b, c, d, e;
- cin >> a >> b >> c >> d >> e ;
- int k = 0;
- for ( int i = 0; i <= 1000; i++ )
- if (a*i*i*i + b*i*i + c*i + d == 0)
- if (i — e != 0)
- k++;
- cout << k ;
Задача S. ГНЧЭ-1
"ГНЧЭ-1" – сложное электронное устройство, выдающее каждую секунду очередное число последовательности 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5. Ввиду дороговизны электронных комплектующих вам поручено разработать эмулятор для этого устройства.
Дано количество секунд (от 1 до 1000000), которые работает генератор после включения. Вывести результат работы генератора
Вариант 1.
При таком варианте реализации мы печатаем столько раз текущее значение cur сколько оно само обозначает count , после чего обнуляем подсчет одинаковых выводов count и переходим на следующее текущее значение cur и т.д.
- int n;
- cin >> n;
- int cur = 1 , count = 0;
- for ( int i = 1; i <= n; i++)
- <
- cout<< cur << ‘ ‘ ;
- count++;
- if (cur == count)
- <
- cur++;
- count = 0;
- >
- >
Вариант 2.
В этом варианте решения идея та же. Однако контроль за количеством отработанных секунд и количеством напечатанных текущих значений возложены на два отдельных цикла.
Итак, здесь мы ведем подсчет напечатанных позиций pos , которых должно быть ровно столько же, сколько секунд работает машина. А внутренним циклом задаем печать текущего числа cur . Проверка условия if (pos == n) не даст задержаться во внутреннем цикле дольше положенных секунд.
Вводятся 100 чисел сумму которых необходимо посчитать
помогите решить три номера.
1. Вычислите сумму данных 100 натуральных чисел. Вводятся 100 чисел, сумму которых необходимо посчитать.
2. Вводится число N , а затем N чисел. Подсчитайте, сколько среди данных N чисел нулей.
3. Подсчитайте, сколько среди данных N чисел нулей, положительных чисел, отрицательных чисел. Вводится число N , а затем N чисел. Необходимо вывести сначала число нулей, затем число положительных и отрицательных чисел.
Задание решать на PYTHON Вычислите сумму данных 100 натуральных чисел. Входные данные Вводятся 100 чисел, сумму которых необходи
Задание решать на PYTHON
Вычислите сумму данных 100 натуральных чисел.
Входные данные
Вводятся 100 чисел, сумму которых необходимо посчитать.
Выходные данные
Программа должна вывести единственное число — полученную сумму.
Тернарный оператор должен возвращать значение (или ссылку на переменную), которое потом можно использовать. Например, если в целочисленной переменной a записано число -3, то используя такой синтаксис:
int absa = a >= 0 ? a : -a;
можно присвоить переменной absa значение |-3| = 3.
Выражения break, continue (и, например, return) управляют выполнением программы, показывая, какую инструкцию выполнять следующей, и не возвращают никакого значения (даже void). Поэтому при попытке использовать такие выражения в качестве аргументов тернарного оператора, ожидающего, что оба аргумента вернут какое-то значение, возникает ошибка компиляции.
Если очень хочется использовать тернарный оператор для выхода из цикла (но зачем?) можно выбрасывать исключение, которое потом обрабатывать, например, так:
try <
int a = 5;
while(true) <
a == 0 ? throw «a equals 0» : (void) 0;
a—;
>
> catch (<span>char const*</span> s) <
if (s != «a equals 0») throw s;
>;
Вводятся 100 чисел сумму которых необходимо посчитать
1)
var a:array [1..10] of integer;
i,sum:integer;
begin
randomize;
sum:=0;
for i:=1 to 10 do
begin
a[i]:=random(100)-50;
write (a[i],’ ‘);
if a[i] < 0 then sum:=sum+a[i];
end;
writeln;
writeln (‘Summa: ‘,sum);
readln;
end.
2)
var a:array [1..10] of integer;
i,max,index:integer;
begin
for i:=1 to 10 do
begin
write (‘A[‘,i,’] = ‘);
readln (a[i]);
end;
max:=a[1];
index:=1;
for i:=2 to 10 do
if a[i] > max then
begin
max:=a[i];
index:=i;
end;
writeln (‘Max: ‘,max,’.Index: ‘,index);
readln;
end.
3)
var a:array [1..10] of integer;
max,min,i,temp:integer;
begin
randomize;
for i:=1 to 10 do
begin
a[i]:=random(50);
write (a[i],’ ‘);
end;
writeln;
max:=1;
min:=1;
for i:=2 to 10 do
if a[i] > a[max] then max:=i else
if a[i] < min then min:=i;
writeln (‘Max: ‘,a[max]);
writeln (‘Min: ‘,a[min]);
temp:=a[min];
a[min]:=a[max];
a[max]:=temp;
for i:=1 to 10 do write (a[i],’ ‘);
end.
Решение задачи Подсчет чисел с Mccme
         
Автор: Администратор