Nastavnica kaze da je ovo rijesenje...
REM plocice
CLS
INPUT d
INPUT s
INPUT p
IF d MOD p > 0 AND s MOD p = 0 THEN br = s \ p
IF s MOD p > 0 AND d MOD p = 0 THEN br = d \ p
IF d MOD p > 0 AND s MOD p > 0 THEN br = d \ p + s \ p + 1
PRINT br
END
Nastavnica kaze da je ovo rijesenje...
REM plocice
CLS
INPUT d
INPUT s
INPUT p
IF d MOD p > 0 AND s MOD p = 0 THEN br = s \ p
IF s MOD p > 0 AND d MOD p = 0 THEN br = d \ p
IF d MOD p > 0 AND s MOD p > 0 THEN br = d \ p + s \ p + 1
PRINT br
END
To jest jer uzima u obzir sva tri slučaja. Plus što je nastavnica zaboravila inicijalizirati varijablu br na nulu, ako ne treba lomiti pločice ni po horizontali, ni po vertikali, broj ostaje nula.
Evo rješavam zadatak i napisao sam ovaj kod:
#include <iostream>
#include <vector>
#include <cmath>
#include <climits>
#include <algorithm>
#include <iomanip>
#include <utility>
using namespace std;
vector<vector<double> > mreza;
vector<pair<int,int> > dots;
double distance(pair<int,int> one,pair<int,int> two){
double tmp;
tmp=sqrt(abs(one.first-two.first)*abs(one.first-two.first)+abs(one.second-two.second)*abs(one.second-two.second));
return tmp;
}
const double inf=ULONG_MAX;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
dots.push_back(make_pair(x,y));
}
vector<double> temp(n,inf);
mreza.insert(mreza.begin(),n,temp);
for(int x=0;x<n;x++)
for(int y=0;y<n;y++){
if(y==x) continue;
mreza[x][y]=mreza[y][x]=distance(dots[x],dots[y]);
}
vector<double> dist(n,inf);
vector<bool> bio(n,false);
dist[0]=0;
for(int x=0;x<n-1;x++){
double udaljenost=inf+1;
int elem;
for(int y=0;y<n;y++){
if(udaljenost>dist[y] && !bio[y]){
udaljenost=dist[y];
elem=y;
}
}
bio[elem]=true;
for(int y=0;y<n;y++){
if(dist[y]>udaljenost+mreza[elem][y]); // 52
dist[y]=udaljenost+mreza[elem][y];
}
}
double max=0;
for(int x=0;x<n;x++){
if(dist[x]>max) max=dist[x];
}
cout<<setprecision(2)<<max;
return 0;
}
Pokušavam ga prevesti no g++ mi uporno vraća:
/home/capttawish/Dropbox/cpp/natjecanja/2011/mreza.cpp:34|52|instantiated from here|
/usr/include/c++/4.6/bits/stl_iterator_base_types.h|166|error: no type named ‘iterator_category’ in ‘struct std::pair<int, int>’|
/usr/include/c++/4.6/bits/stl_iterator_base_types.h|167|error: no type named ‘value_type’ in ‘struct std::pair<int, int>’|
/usr/include/c++/4.6/bits/stl_iterator_base_types.h|168|error: no type named ‘difference_type’ in ‘struct std::pair<int, int>’|
/usr/include/c++/4.6/bits/stl_iterator_base_types.h|169|error: no type named ‘pointer’ in ‘struct std::pair<int, int>’|
/usr/include/c++/4.6/bits/stl_iterator_base_types.h|170|error: no type named ‘reference’ in ‘struct std::pair<int, int>’|
||=== Build finished: 5 errors, 0 warnings ===|
Uopće nemam ideju što nije u redu! Može li mi netko reći gdje sam pogrješio?
EDIT:
Rješio sam problem. Naime funkcija distance je već bila deklarirana u std pa je to izazvalo pomutnju u g++'u. Dakle trebao sam samo dodat :: ispred poziva funkcije ili jednostavno promijeniti ime funkcije.
4.Autobus koji vozi na relaciji doboj –derventa ima n stanica na kojima izlaze i ulaze putnici.kako bi vlasnik preduzeća imao uvid jesuli mu autobusi dovoljno veliki ,da putnici nebi stajali,naredio je vozačima da bilježebroj putnika u autobusu.Kako je vozačima naporno nakon svake stanice brojati putnike,oni broje samo koliko je putnika izašlo i koliko je ušlo na pojedinoj stanici.
Napiši program čiji će ulazni podaci biti broj stanica na datoj relaciji i za svaku stanicu broj putnika koji su izašli i broj putnika koji su ušlina toj stanici.program treba ispisivati koliko je najviše putnika vozilo u nekom trenutku u autobusu.
Napomena:
Prva stanica je u Doboju i prije nego autobus otvori vrata on je prazan.
Poslednja stanica je u derventi i na njoj će svi putnici izaćiiz autobusa i niko u njega neće ući.
Ulazni podaci:
Prirodan broj N(1<=N<=20)-broj stanica na kojima staje autobus
-N puta po dva cijela broja AiB(0<=A,B<=100) pri čemu je
A-broj putnika koji je izašao na stanicu
B-broj putnika koji je ušao na stanici
Svaki broj će biti u novom redu
Izlazni podatak:
Cijeli broj M koji će predstavljti najveći broj putnika koji se vozio autobusom u nekom trenutku.
Moze li samoo postupak kako da uradim.... ne treba mi kod.
Prvo ćeš početni broj putnika zapisati u jednu varijablu max. Moraš napraviti jednu for petlju koja će se iterirati N puta. U svakoj iteraciji petlje unosit će se broj putnika koji je ušao i izašao. Na ukupan broj putnika dodavat ćeš razliku broja putnika koji su ušli i koji su izašli. I to ćeš uspoređivati sa varijablom max te pohranjivati u nju samo ako je broj putnika veći od max. I na kraju će ti u varibali max ostati najveći broj putnika:
Rješio sam problem. Naime funkcija distance je već bila deklarirana u std pa je to izazvalo pomutnju u g++'u. Dakle trebao sam samo dodat :: ispred poziva funkcije ili jednostavno promijeniti ime funkcije.
Mozel pomoc?
Poceo sam raditi zadatak ....
Rajić?
Prvo što trebaš je napraviti jedno polje veličine 100 i inicijalizirati ga na 0. Ono označava svaki trenutak. Onda ćeš pomoću for petlje n(u ovom sučaju konstanto 3) puta unositi brojeve a i b koji označavaju početni i krajni trenutak. U polje [a] povećavaš za jedan, a polje [b] smanjuješ za jedan; Nakon toga jednom for petljom prođeš po polje te broj vozila u trenutku x računaš kao zbroj vozila u prethodnome trenutku i trenutnome. Tada dobiješ broj vozila u svakome trenutku. I onda samo for petljom izračunaš ukupnu cijenu:
#include <iostream>
using namespace std;
int main(){
int test[100]={0};
int A,B,C;
cin>>A>>B>>C;
int n=3;
for(int x=0;x<n;x++){
int a,b;
cin>>a>>b;
test[a-1]++;
test[b-1]--;
}
int uk=0;
for(int x=1;x<100;x++){
test[x]+=test[x-1];
}
B*=2;
C*=3;
for(int x=0;x<100;x++){
switch (test[x]){
case 1:
uk+=A;
break;
case 2:
uk+=B;
break;
case 3:
uk+=C;
}
}
cout<<uk<<endl;
return 0;
}
Algoritam je konstante složenosti O(200). Mogao se još ubrzati no radi razumljivosti koda ostavio sam ovako.
Prvo što trebaš je napraviti jedno polje veličine 100 i inicijalizirati ga na 0. Ono označava svaki trenutak. Onda ćeš pomoću for petlje n(u ovom sučaju konstanto 3) puta unositi brojeve a i b koji označavaju početni i krajni trenutak. U polje [a] povećavaš za jedan, a polje [b] smanjuješ za jedan; Nakon toga jednom for petljom prođeš po polje te broj vozila u trenutku x računaš kao zbroj vozila u prethodnome trenutku i trenutnome. Tada dobiješ broj vozila u svakome trenutku. I onda samo for petljom izračunaš ukupnu cijenu:
#include <iostream>
using namespace std;
int main(){
int test[100]={0};
int A,B,C;
cin>>A>>B>>C;
int n=3;
for(int x=0;x<n;x++){
int a,b;
cin>>a>>b;
test[a-1]++;
test[b-1]--;
}
int uk=0;
for(int x=1;x<100;x++){
test[x]+=test[x-1];
}
B*=2;
C*=3;
for(int x=0;x<100;x++){
switch (test[x]){
case 1:
uk+=A;
break;
case 2:
uk+=B;
break;
case 3:
uk+=C;
}
}
cout<<uk<<endl;
return 0;
}
Algoritam je konstante složenosti O(200). Mogao se još ubrzati no radi razumljivosti koda ostavio sam ovako.
Znas li mozda kako bi islo u qbasicu?
Znas li mozda kako bi islo u qbasicu?
Ne znam jer nikada nisam programirao u qbasicu.
Znas li mozda kako bi islo u qbasicu?
Ne znam jer nikada nisam programirao u qbasicu.
Ok,hvala svejedno...
Evo rješavam zadatak i napisao sam ovaj kod:
Morat ćeš čekati Tracera, baksu, rustweavera ili flokija.
Znas li mozda kako bi islo u qbasicu?
Pogresna tema, ne vidis li da je ova za C++?
ali evo ti:
nisam komplicirao
Čovjek mu da super algoritam za riješiti zadatak, složeniji za osmisliti, nego pretvoriti u kod bilo kojeg jezika, a on onako gotovanski "jel može u qbasicu"
Čovjek mu da super algoritam za riješiti zadatak, složeniji za osmisliti, nego pretvoriti u kod bilo kojeg jezika, a on onako gotovanski "jel može u qbasicu"
Sad mi na pamet pada odredena poslovica sa svinjama i biserima :D
steta truda...
Pitanje,dali mozda ima ko kakav examle source za pomicanje i click miša na određene kordinate?
Baš sam se sad registrirao na spoj.pl.
Probao sam riješiti ovaj zadatak al mi nije jasno kako kod inputa može biti upisan još jedan broj poslije 42 iako piše da se kad unese broj 42 program zaustavlja.Hvala.
Pitanje,dali mozda ima ko kakav examle source za pomicanje i click miša na određene kordinate?
#include <windows.h>
...
float mX=65535.0/GetSystemMetrics(SM_CXSCREEN);
float mY=65535.0/GetSystemMetrics(SM_CYSCREEN);
int x=200, y=200;
//pomakni cursor na odredeno mjesto
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, mX*x, mY*y, 0, 0);
//lijeva tipka misa pritisnuta
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
//lijeva tipka misa otpustena
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
...
pogadas, gornji kôd uzrokuje lijevi klik na koordinatama [200, 200]
Baš sam se sad registrirao na spoj.pl.
Probao sam riješiti ovaj zadatak al mi nije jasno kako kod inputa može biti upisan još jedan broj poslije 42 iako piše da se kad unese broj 42 program zaustavlja.Hvala.
Što ako je input iz datoteke, a ne s tipkovnice? Čovek hoće pokazati da program ne staje zato što je input došao do kraja, nego zato jer je došao do broja 42.
Pitanje,dali mozda ima ko kakav examle source za pomicanje i click miša na određene kordinate?
Znas li mozda kako bi islo u qbasicu?
Pogresna tema, ne vidis li da je ova za C++?
ali evo ti:
nisam komplicirao
Pfuj QBasic. S tim ljudima samo produljuješ agoniju.
Baš sam se sad registrirao na spoj.pl.
Probao sam riješiti ovaj zadatak al mi nije jasno kako kod inputa može biti upisan još jedan broj poslije 42 iako piše da se kad unese broj 42 program zaustavlja.Hvala.
Taj input poslije 42 uopće nije bitan, njega moraš gledati kao da ne postoji. Ti učitavaš broj po broj, te tako ispisuješ brojeve, sve dok uneseni broj ne bude 42. Tada prekidaš program.
To uradiš pomoću while petlje. Kada je broj jednak 42 onda program prekineš.Evo:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main(){
int broj;
cin>>broj; //unosiš početnu vrijednost
while(broj!=42){ //dok je broj raziličit od 42 ponavljaš iteriranje
cout<<broj<<endl; //ispišeš broj
cin>>broj; //unosiš novi broj
}
return 0; //prekid programa
}
Dakle ti uopće ne moraš znati koliko brojeva treba upisati. Kada uneseni broj bude jednak 42, ti ga ne ispisuješ i prekidaš progam.
To uopće nema veze. Ti taj broj moraš ignorirati, tj. gledati kao da ne postoji. Ti 42 gledaš kao zadnji uneseni broj i ono dalje ništa ne unosiš.
Nisi me shvatio. Nije bitno on što se unosi poslije 42. To za tvoj program kao da ne postoji. Ti moraš razmišljati kao da je 42 zadnji uneseni broj. I tada prekineš program. A ono što je stavljeno u input poslije 42, to jednostavno nećeš unositi u program.
Dakle spoj.pl pomoću evaluatora unese neki input. Ti iz toga inputa pomoću cin/scanf naredbe dobivaš jedan po jedan broj. Unosiš ih onako kao želiš. Npr.
INPUT:
1
88
42
53
150
Ti u svoj program uneseš prvi broj postane ovakav:
INPUT88
42
53
150
Sljedeći broj na inputu je 88. Ti ćeš njega preuzeti iz inputa kada želiš. Mi uzimamo brojeve iz inputa do 42. Kada bude 42 mi prekidamo unos:
INPUT
53
150
Ta sva broja se nalaze u INPUTU. Oni uopće nisu u tvome programu. Prekidom tvoga programa nestane i INPUT za tvoj program i ta sva broja jednostavno nestanu. Dakle korisnik ih unese no ti ih uopće ne uzimaš u svome programu.
imam jedno cini mi se jednostavno pitanje: kako napraviti algoritam koji bi za zadani broj izbacio npr. 10 tih brojeva ciji je prosjek taj isti broj, no da na umu imate da ce vrlo vjerojatno taj broj biti blizu prosjeka, a mala sansa da ce daleko ako me razumijete. objasnit cu na primjeru:
prosjek je 1,5.
1
2
1
3
0
4
2
1
1
1
1
0
2
stvar je u tome da imam zadano kolko neka nogometna momčad zabija u prosjeku, i sad ocu da mi izbaci moguce rezultate. ako je moguce u pascalu no moze i u c++ posto je tema c++. hvala unaprijed
Može mi netko reći što bi trebao raditi ovaj dio koda?Zadatak je u tome da od upisanog stinga treba naći najkraći mogući.
string ShortestPalindrome(string s) {
if (IsPalindrome(s)) return s;
int x = 1;
string w = s;
while(!IsPalindrome(w)) {
w = s + ReverseString(s.substr(0, x));
x++;
}
return w;
}
Može mi netko reći zašto ovaj kod ne radi?Baca mi grešku u liniji gdje koristim malloc.
#include<iostream>
#include<cstdlib>
#include<string.h>
using namespace std;
int main() {
char *polje[1000];
char buff[3001];
int n;
cin>>n;
for ( int i = 0 ; i < n; ++i) {
cin>>buff;
polje[i] = malloc(sizeof(char) * (strlen(buff)+1));
strcpy(polje[i],buff);
}
for ( int i = 0; i < n; ++i)
cout<<polje[i];
for ( int i = 0; i < n; ++i)
free(polje[i]);
system("PAUSE");
return 0;
}