(см. объяснение)
Объяснение:
Pascal:
var x, m, s, d: integer;
begin
for i: integer := 1 to 150 do
begin
x:= i;
m:= 0;
s:= 0;
while(x>0) do
begin
d:= x mod 7;
s:= s+d;
if(d>m) then
m:= d;
x:= x div 7;
end;
if((m=5) and (s=12)) then
writeln(i);
end;
end.
Python:
for i in range(1, 150):
x = i
m = s = 0
while x > 0:
d = x % 7
s += d
if d > m:
m = d
x //= 7
if m == 5 and s == 12:
print(i)
Аналитическое решение:
Перейдем в семеричную систему счисления. Тогда операция mod 7 будет получать последнюю цифру исходного числа. Заметим также, что в переменную m кладется максимальная цифра из введенного числа. Тогда нам нужно, чтобы цифра 5 стояла в разряде единиц и была наибольшей в числе. Понятно, что двузначное число, удовлетворяющее этим условиям, собрать нельзя. Предположим, что число трехзначное, начинающееся на 1. Тогда оно имеет вид 1?5, где ?≤5. Но 1+5+5<12, поэтому такой случай никогда не приведет к интересующему ответу. Пусть число имеет вид 2?5. Тогда 2+5+5=12, то есть число 255 нас устраивает. Переведя его в десятичную систему счисления, получаем, что ответом будет число 138.
Задание выполнено!
#include<iostream>
using namespace std;
int main(){
int N, min_index=1001;
long droids[1001]={0}, min=2000000001, pre_min=2000000001;
cin>>N;
for(int i=0; i<N; i++)
cin>>droids[i];
for(int i=0; i<N; i++)
if(droids[i]<min) {
min = droids[i];
min_index = i;
}
droids[min_index]=2000000001;
for (int i=0; i<N; i++)
if(droids[i]<pre_min)
pre_min=droids[i];
cout<<min<<" "<<pre_min;
}
Поделитесь своими знаниями, ответьте на вопрос:
Какая команда присвоения должна следовать за а: = а + в и в: = а - в, чтобы последовательное выполнение всех трех команд вело к обмену значениями переменных а и в? варианты ответа: 1) в: = а + в 2)а: = а + в 3)а: = а - в 4)в: = в - а
20 символов ( . ) ( . )