[Logo] Mendo Judge Discussion Board - Forums
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
Задача:Биквадрат(група други)  XML
Forum Index » Задачи од национални натпревари
Author Message
StefanStojkovski



Joined: 04/04/2012 23:46:32
Messages: 6
Offline

Направив програма за оваа задача што дава точни решенија, но кога ќе ја испратам ми враќа дека само првото ми е точно т.е. за примерот.
За да се уверам дека ми е точна го спуштив 4-тиот тест случај. Тој е: за инпут 2 и 30 да даде аутпут 14. Мојата програма кога ќе ја пуштам за овие инпути дава 14.
Меѓутоа кога ќе ја испратам, за тест случај четири, вели дека е погрешн резултатот. Не знам што е работата. Правев голема прверка сметајки на лист и секогаш ми се совпаѓа со програмата. Еве ја програмата. На почеток додадов #include <math.h> за да го чита sqrt кое пресметува корен од број. Доколку најдете грешка или знаете зошто ми враќа грешно иако е точно ве молам пишете.


#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{int p,k,l,m,s,t,i;
cin>>p>>k;
l=0;
for(i=p;i<=k;i++)
{
m=0;t=0;
if (i/2+i/2==i)
while((m<=i/2 && t==0) or (m==0 && t==0))
{s=i-m;
if((sqrt(s)*sqrt(s)==s) && (sqrt(m)*sqrt(m)==m))
{t=1;
l=l+1;}
m++;}
else
{
while((m<i/2 && t==0) or (m==0 && t==0))
{s=i-m;
if((sqrt(s)*sqrt(s)==s) && (sqrt(m)*sqrt(m)==m))
{t=1;
l=l+1;}
m++;}}}
cout><<l;
system("PAUSE";
return EXIT_SUCCESS;
}

This message was edited 2 times. Last update was at 07/04/2012 18:22:52

tStojkovski



Joined: 13/02/2010 14:23:00
Messages: 108
Location: Гостивар
Offline

Бриши system("pause");
[Email] [MSN]
StefanStojkovski



Joined: 04/04/2012 23:46:32
Messages: 6
Offline

Ве молам немојте со бриши system(pause); не ми е прва задача, имам решено околу 30 и не ја праќам со system(pause); извинете што не го избришав овдека.
obi1kenobi



Joined: 18/02/2010 20:01:33
Messages: 168
Offline

StefanStojkovski wrote:Ве молам немојте со бриши system(pause); не ми е прва задача, имам решено околу 30 и не ја праќам со system(pause); извинете што не го избришав овдека.


Стави го кодот во 'code' тагови, не се чита вака.
bedzo



Joined: 18/01/2011 02:05:03
Messages: 234
Offline

Не ти го разгледав кодот,но пишувам да ти кажам дека и brute-force поминува...
MOI



Joined: 07/07/2010 16:31:48
Messages: 447
Offline

StefanStojkovski wrote:Направив програма за оваа задача што дава точни решенија, но кога ќе ја испратам ми враќа дека само првото ми е точно т.е. за примерот.
За да се уверам дека ми е точна го спуштив 4-тиот тест случај. Тој е: за инпут 2 и 30 да даде аутпут 14. Мојата програма кога ќе ја пуштам за овие инпути дава 14.
Меѓутоа кога ќе ја испратам, за тест случај четири, вели дека е погрешн резултатот. Не знам што е работата. Правев голема прверка сметајки на лист и секогаш ми се совпаѓа со програмата. Еве ја програмата. На почеток додадов #include <math.h> за да го чита sqrt кое пресметува корен од број. Доколку најдете грешка или знаете зошто ми враќа грешно иако е точно ве молам пишете.

Бидејќи sqrt(x) враќа резултат реален број. Прочитај ја прво (барем) третата страна од документов - greski.pdf. Ако ја реализираме твојава идеја, програмата треба да изгледа вака:
Инаку, треба да избегнуваш работа со реални броеви - задачава може да се реши без користење на такви операции (како пресметување на квадратен корен). Еве ти неколку теми од форумов (ТУКА и ТУКА), прочитај ги ако имаш време. Секогаш е подобро да се учи од туѓите грешки

This message was edited 2 times. Last update was at 06/04/2012 21:27:35

StefanStojkovski



Joined: 04/04/2012 23:46:32
Messages: 6
Offline

Благодарам. Програмата ги даде сите точни решенија.

Сепак прв пат што е програмски јазик дознав во октомври а што е ц++ дознав во фебруари(На школо каде решаваме многу поедноставни задачи). Ако може некој едноставен начин да ми објасни што беше проблемот. Што се однесува на реалните броеви дали сугерираш дека sqrt(8.)*squrt(8.) во мојата програма секогаш ќе дава 8 затоа што squrt(8.) = 2.81...(реален број по defult), па затоа пред squrt го ставаш int за sqrt(8.)*squrt(8.) да дава 4 зато што инт од корен 8 е 2? Ако е така зошто програмата секогаш даваше точни резултаи кога ја тестирав во црната кутија (како и да се вика(ше)).
Исто овој ред не знам што прави?

int int_sqrt(int x)
{
return (int)(round(sqrt(x)));
}

И досега дефинирав променливи само на почеток, па дали за да дефинирам променлива во услов од if ќе треба да е на пр. (int_p<8.) како што е int_sqrt(s), со долната црта и без точки или запирки.
Фала уште еднаш.

This message was edited 2 times. Last update was at 07/04/2012 16:31:31

bedzo



Joined: 18/01/2011 02:05:03
Messages: 234
Offline

int int_sqrt(int x)
{
return (int)(round(sqrt(x)));
}


Oва ти е функција која за квадратен број ти дава цел број, наместо реален. Го заокружува реалниот број и го враќа како цел.
 
Forum Index » Задачи од национални натпревари
Go to:   
Powered by JForum 2.1.8 © JForum Team