Loading...
Jora_Nersisyan avatar Jora_Nersisyan 0 Точки

Judge - Error в "Koding 101 exam - 24 April 2016"

В "Koding 101 exam - 24 April 2016" задача 01. Поправка на плочки

мисля че има някаква грешка. Направих задачата на C++ и въведох:

20

5

4

1

2

и ми извежда правилно според мен:     а judge не ми го приема и иска да е:

19.9                                                      19.90

3.98                                                       3.98

 

При въвеждане на:

40

0.8

0.6

3

5

Ми извежда вярно:

3302.08

660.42

Ето го и кода ми:

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
	double n, w, l, m, o, sp, pp, Nplochki, time;
	cin >> n;
	cin >> w;
	cin >> l;
	cin >> m;
	cin >> o;
	if(1 <= n <= 100 && 0.1 <= w <= 10.00 && 0.1 <= l <= 10.00 && 0 <= m <= 10 && 0 <= o <= 10)
	{
		n = n * n;
		sp = m * o;
		pp = w * l;
		n = n - sp;
		Nplochki = round(n / pp * 100) / 100;
		time = round(Nplochki * 0.2 * 100) / 100;
		cout << Nplochki << endl << time << endl;
	}
}

А ако грешката е в мен моля кажете ми. Благодаря предварително.

Линк към задачата:https://judge.softuni.bg/Contests/Practice/Index/181#0

Тагове:
0
Предложения и проблеми 04/04/2018 18:13:58
kolioi avatar kolioi 641 Точки
Best Answer

Няма грешка в Джадж. EricDraven ти е казал какъв е проблема. В условието на задачата пише

"Резултата да се форматира до втория знак след десетичния разделител"

което значи, че 19.9 трябва да се изведе като 19.90 (два знака след десетичната точка).

Това може да го направиш например така

cout.precision(2);
cout << fixed << Nplochki << endl << time << endl;

или така

#include <iomanip>
cout << fixed << setprecision(2) << Nplochki << endl << time << endl;

Още няколко неща:

- няма нужда от този if - входните данни винаги са коректни;

- само w и l са числа с дробна част, а n, m и o са цели числа.

Ето ти едно примерно решение:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
	int n, m, o, sp;
	double w, l, pp, Nplochki, time;

	cin >> n >> w >> l >> m >> o;

	n = n * n;
	sp = m * o;
	pp = w * l;
	n = n - sp;
	Nplochki = n / pp;
	time = Nplochki * 0.2;

	cout << fixed << setprecision(2) << Nplochki << endl << time << endl;

	return 0;
}

 

0
04/04/2018 23:37:04
Jora_Nersisyan avatar Jora_Nersisyan 0 Точки

Много ви благодаря нямах представа.

0
kolioi avatar kolioi 641 Точки

Няма проблем. Предполагам, че тези неща ще ви ги кажат на лекциите.

И още няколко неща:

- никога не използвай сравнение от вида 

a<b<c

Компилатора го разбира като

(a<b)<c
а не като a<(b<c) или (a<b)&&(b<c)

и това винаги е вярно (true). Което означава, че сравнението не работи. Например ако имаш

int a = 3;
if(1 <= a <= 10)  cout << "OK";

при всякакви стойности на а на екрана ще се отпечатва OK.

Майкрософтския компилатор генерира следното предупреждение:

warning C4804: '<=': unsafe use of type 'bool' in operation

Предполагам, че и другите компилатори показват подобно съобщение.

Правилният начин е този:

if(1 <= a && a <= 10)

- две думи за закръгляването. За числа с дробна част закръгляването става с fixed и setprecision(). Закръгляването до цяло число става с функциите round(), floor(), ceil() и trunc(). Пример от тук

value   round   floor   ceil    trunc
-----   -----   -----   ----    -----
2.3     2.0     2.0     3.0     2.0
3.8     4.0     3.0     4.0     3.0
5.5     6.0     5.0     6.0     5.0
-2.3    -2.0    -3.0    -2.0    -2.0
-3.8    -4.0    -4.0    -3.0    -3.0
-5.5    -6.0    -6.0    -5.0    -5.0

- и нещо за имената на променливите - използвай или само български, или само имена на английски, но не ги смесвай.

0
05/04/2018 19:32:14
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.