Задача: Селекция. Селекционер вывел новый сорт зерновой культуры и снял с опытной делянки [latex]k [/latex] кг семян. Посеяв 1 кг семян, можно за сезон собрать [latex]p [/latex] кг семян. Через сколько лет селекционер сможет засеять новой культурой поле площадью [latex]s [/latex] га, если норма высева [latex]n [/latex] кг/га?
k | p | s | n | y |
1 | 2 | 3 | 4 | 4 |
6 | 10 | 20 | 41 | 3 |
0 | 1 | 2 | 3 | — |
Решение:
Ссылка на ideone C++: http://ideone.com/s7pxme
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <math.h> using namespace std; int main() { double k,p,s,n; int y; cin>>k>>p>>s>>n; if ((k<=0)||(p<=0)||(s<=0)||(n<=0)) {cout<<"Неверные денные";} else { y = ceil(log(n*s/k)/log(p)); cout<<y; } } |
Ссылка на ideone Java: http://ideone.com/JpE5D1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double k,p,s,n,y; k=in.nextDouble(); p=in.nextDouble(); s=in.nextDouble(); n=in.nextDouble(); if ((k<=0)||(p<=0)||(s<=0)||(n<=0)) {System.out.printf("Неверные денные");} else { double l1=Math.log(n*s/k); double l2=Math.log(p); y = Math.ceil(l1/l2); System.out.printf("%.0f",y); } } } |
Проверяем что б все данные были строго больше нуля
Вычисляем количество лет, требуемых для роста зерновой культуры по формуле:
[latex] \frac{ln(ns/k)}{ln(p)} [/latex] (Количество лет округляем в большую сторону всегда)
В целом похоже на правду. Одно уточнение. Если мы ищем целое число лет, то его стоит сохранять в переменную целочисленного типа. Потому что на cout мы положиться не можем. Вот выведет он на каком-то контесте 2.9999999 вместо 3 и будете гадать, почему по правильно решенной задаче Wrong answer 4, например.
Исправил
Не думаю, что ceil() может так с нами поступить, но поддерживаю. Методически это правильно.
Задачу зачёл, но как Вы наверное догадываетесь это опечатка. Имелась в виду задача 11.7, которая реально сложная. Но не обязательная.
Я тоже так подумал. Ничего страшного, попробую сделать и 11.7