NAJVREDNIJI PREDMETI - REŠENJE
#include <iostream>
#include<stdio.h>
/*Algoritmi osnovni nivo-> nizovi->sortiranje->sortiranje*/
using namespace std;
int main()
{
double novac,ost;
int N;
cin>>novac>>N;
string sifra[N]; //,sifKup[N];
double cena[N]; //,cenaKup[N];
for(int i=0; i<N; i++)
{
cin>>sifra[i]>>cena[i];
}
int j;
/*sortiranje metodom umetanja*/
for(int i=1; i<N; i++)
{
double b=cena[i];
string p=sifra[i];
for(j=i-1; j>=0; j--)
{
if(cena[j]<b)
{
cena[j+1]=cena[j];
sifra[j+1]=sifra[j];
}
else
{
break;
}
}
cena[j+1]=b; //umece broj b izmedju veceg i manjeg
sifra[j+1]=p; //umece broj b izmedju veceg i manjeg
}
/* cout<<"sortirani niz:"<<endl;
for(int i=0;i<N;i++){
cout<<cena[i]<<endl;
}*/
double tekCena;
ost=novac;
tekCena=cena[0];
for(int i=0; i<N; i++)
{
if(ost < cena[i])
{
continue;
}
tekCena=cena[ i ];
cout<<sifra[i]<<" ";
printf("%.2f\n", tekCena);
ost=ost-tekCena;
}
if(ost>0)
{
printf("%.2f", ost);
}
return 0;
}
#include<stdio.h>
/*Algoritmi osnovni nivo-> nizovi->sortiranje->sortiranje*/
using namespace std;
int main()
{
double novac,ost;
int N;
cin>>novac>>N;
string sifra[N]; //,sifKup[N];
double cena[N]; //,cenaKup[N];
for(int i=0; i<N; i++)
{
cin>>sifra[i]>>cena[i];
}
int j;
/*sortiranje metodom umetanja*/
for(int i=1; i<N; i++)
{
double b=cena[i];
string p=sifra[i];
for(j=i-1; j>=0; j--)
{
if(cena[j]<b)
{
cena[j+1]=cena[j];
sifra[j+1]=sifra[j];
}
else
{
break;
}
}
cena[j+1]=b; //umece broj b izmedju veceg i manjeg
sifra[j+1]=p; //umece broj b izmedju veceg i manjeg
}
/* cout<<"sortirani niz:"<<endl;
for(int i=0;i<N;i++){
cout<<cena[i]<<endl;
}*/
double tekCena;
ost=novac;
tekCena=cena[0];
for(int i=0; i<N; i++)
{
if(ost < cena[i])
{
continue;
}
tekCena=cena[ i ];
cout<<sifra[i]<<" ";
printf("%.2f\n", tekCena);
ost=ost-tekCena;
}
if(ost>0)
{
printf("%.2f", ost);
}
return 0;
}
Objašnjenje koda
Ovaj zadatak traži da kupac, koji ima određeni iznos novca, kupi što skuplje predmete redom počev od najskupljeg, dok god ima dovoljno novca. Nakon što kupi sve moguće predmete, potrebno je prikazati šifre kupljenih predmeta i preostali iznos novca, ako postoji.
Objašnjenje koda:
Objašnjenje koda:
- Deklaracija promenljivih:
- double novac, ost;: novac čuva iznos novca koji kupac ima na početku, a ost čuva preostali novac nakon svake kupovine.
- int N;: N predstavlja broj predmeta koji su na prodaju.
- string sifra[N];: Niz stringova za čuvanje šifri predmeta.
- double cena[N];: Niz koji čuva cene predmeta.
- Unos podataka:
- Korisnik unosi iznos novca i broj predmeta.
- Za svaki predmet unosi se njegova šifra i cena.
- Sortiranje predmeta:
- Predmeti se sortiraju opadajuće po ceni koristeći metodu umetanja (insertion sort). Ovo omogućava da se predmeti sortiraju od najskupljeg ka najjeftinijem.
- Detalji sortiranja:
- b je trenutna cena koju treba umetnuti u sortirani deo niza.
- p je odgovarajuća šifra predmeta.
- Petlja pomera elemente koji su manji od trenutne cene b udesno da bi napravila prostor za umetanje b na odgovarajuće mesto.
- Kupovina predmeta:
- Nakon sortiranja, preostali novac (ost) je inicijalizovan početnim iznosom (novac).
- Kroz petlju se iterira preko sortiranog niza. Ako kupac ima dovoljno novca za trenutni predmet (ost >= cena[i]), on kupuje taj predmet.
- Kupljena šifra i cena se ispisuju, a preostali novac se umanjuje za cenu kupljenog predmeta.
- Ispis preostalog novca:
- Ako nakon svih kupovina ostane novca, ispisuje se preostali iznos.
- Ulaz:
- Kupac ima 1250.75 dinara i postoji 5 predmeta sa datim šiframa i cenama.
- Izlaz:
- Kupac prvo kupuje predmet4 (1125.5 dinara) i zatim predmet5 (115.75 dinara).
- Ostaje mu 9.50 dinara, koji se ispisuju.
- Ulaz:
- Kupac ima 10,000 dinara i postoji 6 predmeta sa datim šiframa i cenama.
- Izlaz:
- Kupac kupuje predmete redom po cenama: 5725, 3010, 1265.
- Nakon toga mu ne ostaje novca, pa se ne ispisuje preostali iznos.
- Ulaz:
- Kupac ima 1,000 dinara i svi predmeti su skuplji od tog iznosa.
- Izlaz:
- Kupac ne može kupiti nijedan predmet i ispisuje se samo preostali iznos novca (1000.00 dinara).