Дан массив, содержащий 70 целых чисел. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести наименьшее содержащееся в массиве положительное число, десятичная запись которого не оканчивается цифрой 7. Гарантируется, что в массиве есть хотя бы один положительный элемент, десятичная запись которого не оканчивается цифрой 7.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
| Бэйсик | Паскаль |
|---|---|
N=70 DIM A(N) AS INTEGER DIM I, J, M AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I ... END
| const N=70; var a: array [1..N] of integer; i, j, m: integer; begin for i:=1 to N do readln(a[i]); ... end.
|
| Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 70 int main(){ int a[N]; int I, j, m; for (i=0; i<N; i++) cin >> a[i]; ... } | алг нач цел N=70 целтаб а[1:N] цел 1, j, m нц для i от 1 до N ввод а[i] кц ... кон |
| Python | |
# допускается также # использовать две # целочисленные переменные j, m a = [] n = 70 for i in range(0, n): a.append(int(input())) ... | |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Пример решения на Паскале:
const N=70;
var a: array [1..N] of integer;
j, i, m: integer;
begin
for j:=1 to N do readln(a[j]);
m:= 0;
for i:=1 to N do
if (a[i] > 0) and (a[i] mod 10 <> 7) and
((a[i] < m) or (m = 0)) then
m:= a[i];
writeln(m)
end.
Пример решения на языке Си.
#include <iostream>
using namespace std;
#define N 70
void main(){
int a[N];
int i, j, m;
for (i=0; i < N; i++){
cin >> a[i];}
m = 2147483647; // Максимальное число, которое может принять целочисленный тип данных в языке Си.
В Паскале данная строка выглядела бы m := 32767;
for (i=0; i < N; i++){
if (a[i] > 0 && a[i] < m && (a[i] % 10 != 7))
{m = a[i];}
}
cout « m « endl;
}


m не может быть равен нулю. Вы ищете минимум среди минимальных чисел, но требуете, чтобы оно было меньше нуля и одновременно было больше нуля.
(a[i] > 0) and (a[i] < m)
Обратите внимание, что ещё есть условие m = 0. При помощи этого условия и учитывается, что мы инициализируем значение минимума нулём.