921. Отрицательные элементы

 

Задана последовательность вещественных чисел длины n. Определить сумму и количество отрицательных элементов в ней.

 

Вход. В первой строке задано количество элементов последовательности n (n ≤ 100). В следующей строке задано n вещественных чисел – элементы последовательности, значения которых не превышают по модулю 100.

 

Выход. В одной строке вывести количество отрицательных чисел и их сумму с двумя десятичными знаками.

 

Пример входа

Пример выхода

5

6 -7.5 2.1 -2.0 0

2 -9.50

 

 

РЕШЕНИЕ

циклы

 

Анализ алгоритма

При помощи одного линейного цикла находим сумму и количество отрицательных элементов массива.

 

Реализация алгоритма

Читаем длину массива n. В переменной cnt подсчитываем количество отрицательных чисел массива, в sum – их сумму. Инициализируем эти переменные нулями.

 

scanf("%d",&n);

sum = 0;

cnt = 0;

 

Читаем n чисел. На лету вычисляем сумму и количество отрицательных элементов.

 

for(i = 0; i < n; i++)

{

  scanf("%lf",&val);

  if (val < 0)

  {

    cnt++;

    sum += val;

  }

}

 

Выводим ответ.

 

printf("%d %.2lf\n",cnt,sum);

 

Реализация – массив

 

#include <stdio.h>

 

int i, n, cnt;

double sum;

double m[100];

 

int main(void)

{

  // read input array

  scanf("%d",&n);

  for(i = 0; i < n; i++)

    scanf("%lf",&m[i]);

 

  // process array

  sum = 0; cnt = 0;

  for(i = 0; i < n; i++)

    if (m[i] < 0)

    {

      cnt++;

      sum += m[i];

    }

 

  // print the answer

  printf("%d %.2lf\n",cnt,sum);

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();   

    int cnt = 0;

    double sum = 0;

    for(int i = 0; i < n; i++)

    {

      double val = con.nextDouble();

      if (val < 0.0)

      {

        cnt++;

        sum += val;

     }

    }

    System.out.printf("%d %.2f\n",cnt,sum);

    con.close();

  }

}

 

Java реализация - ArrayList

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    con.useLocale(Locale.US);

    int n = con.nextInt();

    ArrayList<Double> m = new ArrayList<Double>();

    for(int i = 0; i < n; i++)

      m.add(con.nextDouble());

   

    int cnt = 0;

    double sum = 0;

    for(int i = 0; i < n; i++)

    {

      if (m.get(i) < 0.0)

      {

        cnt++;

        sum += m.get(i);

      }

    }

    System.out.printf(Locale.US,"%d %.2f\n",cnt,sum);

    con.close();

  }

}

 

Java реализация (FastScanner)

 

import java.util.*;

import java.io.*;

 

class FastScanner

{

  private BufferedReader br;

  private StringTokenizer st;

 

  public FastScanner(InputStreamReader reader)

  {

    br = new BufferedReader(reader);

  }

 

  public String next()

  {

    while (st == null || !st.hasMoreTokens())

    {

      try

      {

        st = new StringTokenizer(br.readLine());

      } catch (Exception e)

      {

        e.printStackTrace();

      }

    }

    return st.nextToken();

  }

 

  public int nextInt()

  {

    return Integer.parseInt(next());

  }

 

  public double nextDouble()

  {

    return Double.parseDouble(next());

  }

 

  public void close() throws Exception

  {

    br.close();

  }

}

 

public class Main

{

  public static void main(String[] args)

  {

    FastScanner con =

      new FastScanner(new InputStreamReader(System.in));

    int c, i, n = con.nextInt();

    double s, a;

    for(s = c = 0, i = 1; i <= n; i++)

    {

      a = con.nextDouble();

      if (a < 0.0)

      {

        c++;

        s += a;

      }

    }

    System.out.printf(Locale.US,"%d %.2f\n",c,s);

  }

}

 

Python реализация

 

n = int(input())

m = list(map(float,input().split()))

s = c = 0

for v in m:

  if v < 0 :

    c += 1

    s += v

print (c,"%.2f"%s)