Задача
Совместная работа. Известно время [latex]t_{1},t_{2}, \cdots,t_{n}[/latex], за которое некоторую работу может выполнить каждый из [latex]n[/latex] рабочих бригады, работая в одиночку. Сколько времени понадобится бригаде на выполнение этой работы, если они будут работать совместно (и при этом никто из них не «сачкует»)?
Количество рабочих n. | Время t каждого рабочего, требуемое для выполнения некоторой работы. | Время совместной работы. |
3 | 2 4 5 | 1.1 |
5 | 2 4 5 1 2 | 0.4 |
6 | 6 6 6 6 6 6 | 1.0 |
7 | 8 6 5 6 6 7 2 | 0.7 |
В данной задаче нам нужно найти время, за которое [latex]n[/latex] рабочих выполнят какую-то совместную работу. В задаче не указан общий объём выполняемой работы, по-этому зададим его как 1. Время совместной работы находят по формуле: [latex]t_{call}=\frac{V}{\frac{V}{t_{1}}+\frac{V}{t_{2}}+\cdots+\frac{V}{t_{n}}}[/latex], где [latex]V[/latex] – общий объём выполняемой работы, т.е – 1. Т.к в задаче не указана единица измерения времени, будем считать все в часах.
В программе используются два цикла. Первый– для ввода времени каждого рабочего, а второй– для вычисления общей производительности рабочих. Call–callaboration (время совместной работы), sum – общая производительность рабочих.
Ниже представлена сама программа (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 <math.h> using namespace std; int main() { int N=0; scanf("%d", &N); //количество рабочих double A[N]; for(int i=0; i<N; i++) { cin >> A[i]; //ввод времени для каждого рабочего } double sum=0, call; for(int i=0; i<N; i++) { sum+=1/A[i]; //сумма производительности труда каждого рабочего } call=1/sum; //время совместной работы printf("Совместная работа %d рабочих выполняется за %5.1lf часов \n", N, call); return 0; } |
Код на 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 |
import java.util.*; import java.lang.*; import java.io.*; class Brovko { public static void main (String[] args) throws java.lang.Exception { int N; Scanner in = new Scanner(System.in); N=in.nextInt(); //количество рабочих double[] A=new double[N]; for(int i=0; i<N; i++) { A[i]=in.nextInt(); //ввод времени для каждого рабочего } double sum=0, call; for(int i=0; i<N; i++) { sum+=1/A[i]; //сумма производительности труда каждого рабочего } call=1/sum; //время совместной работы System.out.printf("Совместная работа %d рабочих выполняется за %5.1f часов \n", N, call); } } |
Так же вы можете воспользоваться ссылкой (C++)/ссылкой (Java), для ознакомления с программой.
Программа правильная, молодец!
Вы написали «В программе используются два массива. Первый– для ввода времени каждого рабочего, а второй– для вычисления суммы производительности каждого рабочего. » Но я не вижу в программе второй массив (есть только массив A — это в Вашей терминологии первый массив). И это правильно, что второго массива нет! Есть переменная «sum – сумма производительности каждого рабочего.» Поправьте отчет.
Думал о циклах, написал «массивы» 🙂
Исправлено.
— «объем производительности» такого понятия не существует. Вы имеете в виду общий объём выполняемой работы в обоих случаях. Т.е. нет смысла его разделять.
— «не указана единица измерения времени» это не существенно. Вы найдете объём в тех же единицах в которых будут заданы исходные данные. Вам ведь не нужно переводить из одних единиц в другие или вычислять какие-либо функции от времени.
— «суммы производительности каждого рабочего» — лучше «общей производительности».
Исправил.
Не везде
Убрать из отчета «Т.к в задаче не указана единица измерения времени, будем считать все в часах.»? Я использовал это исключительно для удобности чтения человеком выходного потока данных: «Совместная работа %d рабочих выполняется за %5.1lf часов».
— *удобства
Зачтено
Java версия засчитана, 10 баллов.
Только сейчас заметил, что задача не на массивы, а на потоки.