Задача взята с этого сайта.
В этой задаче необходимо проанализировать значения температуры, дабы найти ближайшее к нулю.
Ввод:
Строка 1: [latex]N[/latex], количество значений температуры.
Строка 2: собственно говоря, сами значения температуры, выраженные целыми числами в диапазоне от -273 до 5526.
Вывод:
Вывести 0 в том случае, если не введено ни одного значения.
Если введено хотя бы одно, то вывести на экран значение ближайшее к 0. Отметить, что если есть 2 значения, одинаково близкие к нулю, но с разными знаками, то на экране должно отобразиться положительное число.
|
[latex]N[/latex] |
Ввод |
Вывод |
Комментарий. |
Простой тест |
5 |
1 -2 -8 4 5 |
1 |
Пройден. |
Сложный тест |
10 |
-5 -4 -2 12 -40 4 2 18 11 5 |
2 |
Пройден. |
Без температур |
0 |
— |
0 |
Пройден. |
Дополнительный тест |
14 |
7 -10 13 8 4 -7 -12 -3 3 -9 6 -1 -6 7 |
-1 |
Пройден. |
Код программы (C++):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#include <iostream> #include <string> #include <math.h> using namespace std; int main() { int N; cin >> N; if (N!=0) { int closest=5527, TEMPS; for (int i=0; i<N; i++) { cin >> TEMPS; if (abs(closest)>abs(TEMPS)||(abs(closest)==TEMPS)) { closest=TEMPS; } } cout << closest << endl; } else { cout << 0 << endl; } } |
Для первого теста нужно было найти ближайшее к нулю значение, когда все числа по модулю были попарно различными. Для этого достаточно было завести переменную типа int и положить в неё значение, которое заведомо больше всех возможных (это 5527, так как по условию задачи значения температур не выходят за пределы [-273;5527]). И в цикле сделать проверку того, что же больше — модуль нашего текущего значения или модуль только что введённого.
Задача 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include <iostream> #include <string> #include <math.h> using namespace std; int main() { int N; cin >> N; int closest=5527, TEMPS; for (int i=0; i<N; i++) { cin >> TEMPS; if (abs(closest)>abs(TEMPS)) { closest=TEMPS; } } cout << closest << endl; } |
Для того, чтобы пройти второй тест необходимо было ввести такое условие, при котором отметалось бы отрицательное значение температуры при наличии такого же по модулю положительного. Для этого мы сравниваем модуль текущего значения температуры со значением введённым (уже не по модулю, так как нам нужно убрать отрицательные числа), и если они равны, то текущее ближайшее значение изменится на положительное, если до этого оно было с минусом.
Задача 2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include <iostream> #include <string> #include <math.h> using namespace std; int main() { int N; cin >> N; int closest=5527, TEMPS; for (int i=0; i<N; i++) { cin >> TEMPS; if (abs(closest)>abs(TEMPS)||(abs(closest)==TEMPS)) { closest=TEMPS; } } cout << closest << endl; } |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { int N; Scanner in = new Scanner (System.in); N=in.nextInt(); int closest=5527, TEMPS; for (int i=0; i<N; i++) { TEMPS=in.nextInt(); if (Math.abs(closest)>Math.abs(TEMPS)||(Math.abs(closest)==TEMPS)) { closest=TEMPS; } } System.out.format("%d%n", closest); } } |
И для последней задачи, конечно, достаточно было ввести условие, что [latex]N[/latex] не равно нулю. В противном случае программа выведет на экран 0. Конечный код указан первым.
Related Images:
Для отправки комментария необходимо войти на сайт.