Задача
Плюсы и минусы. В массиве [latex] Z(m) [/latex] найти число чередований знака, то есть число переходов с минуса на плюс или с плюса на минус. Например в последовательности 0, -2, 0, -10, 2, -1, 0, 0, 3, 2, -3 четыре чередования (как известно нуль не имеет знака).
Код С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <iostream> using namespace std; int main() { int m; cin >> m; int Z[m]; int count = 0; int sign = 0; for (int i = 0; i < m; i++){ cin >> Z[i]; } int i = 0; for(i = 0; (Z[i] == 0) && (i < m); i++ ); sign = Z[i]; for (int i = 0; i < m; i++) { if (sign * Z[i] < 0) { sign = Z[i]; count ++; } } cout << "count" << " = " << count << " "; return 0; } |
Код С++ на Ideone: http://ideone.com/qEJL9Z
Код Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.util.*; import java.lang.*; import java.io.*; class PlusMinus { public static void main (String[] args) throws java.lang.Exception { Scanner read = new Scanner(System.in); int m = read.nextInt(); int Z[] = new int [m]; int count = 0; int sign = 0; for (int i = 0; i < m; i++){ Z[i] = read.nextInt(); } int i = 0; for(i = 0; (Z[i] == 0) && (i < m); i++ ); sign = Z[i]; for (int j = 0; j < m; j++) { if (sign * Z[j] < 0) { sign = Z[j]; count ++; } } System.out.print("Число чередований знака = "+count); } } |
Комментарии
Задаем массив и делаем проверку: находим первый член массива не равный нулю, запоминаем его знак, находим следующий, проверяем если знаки совпадают ищем следующий член массива, в противном случае к сумме прибавляем единицу и запоминаем новый знак .
Тесты
Размер массива (m) | Массив (Z[m]) | Результаты | Комментарии |
11 | 0 -2 0 -10 2 -1 0 0 3 2 -3 | 4 | Пройден |
1 | 1 | 0 | Пройден |
5 | 1 -2 3 -4 5 | 4 | Пройден |