Evo ovako trebam kod za ispis jednakih brojeva koje unesem.Npr. ako unesem 1,2,4,5,1,4,2 da mi se ispiše da broja 1 ima uneseno 2 puta il broja 5 samo jednom.Može li se to uopće ikako izvesti?
- +/- sve poruke
- ravni prikaz
- starije poruke gore

#include <iostream>
using namespace std;
int main() {
int x(100);
int one = 0;
int two =0;
int three = 0;
int four = 0;
int five = 0;
int six = 0;
int seven = 0;
int eight = 0;
int nine = 0;
int ten = 0;
while (x != 0) {
cout << "unesite brojeve: ";
cin >> x;
if (x == 1) {
one++;
} else if (x == 2) {
two++;
} else if (x == 3) {
three++;
} else if (x == 4) {
four++;
} else if (x == 5) {
five++;
} else if (x == 6) {
six++;
} else if (x == 7) {
seven++;
} else if (x == 9) {
nine++;
}
}
cout << "Ispisano je " << one << " jedinica " << endl;
cout << " Ispisano je " << two << " dvojka " << endl;
cout << "Ispisano je " << three << " trojki " << endl;
cout << "Ispisano je " << four << " cetvorki " << endl;
cout << "Ispisano je " << five << " petica " << endl;
cout << "Ispisano je " << six << " sestica " << endl;
cout << "Ispisano je " << seven << " sedmica " << endl;
cout << "Ispisano je " << eight << " osmica " << endl;
cout << "Ispisano je " << nine << " devetki " << endl;
return 0;
}

Za brojeve do 100 (proširiti po volji):
#include <iostream>
using namespace std;
#define MAX 100
int main(){
int i, pom, brojac[MAX] = {0};
do{
cout << "Unesi broj: ";
cin >> pom;
brojac[pom]++;
}while(pom);
for(i = 1; i < MAX; i++)
if(brojac[i])
cout << i << " -> " << brojac[i] << " puta\n";
return 0;
}

Može mi ko reć šta da stisnem za ispis jel ovo unesi broj nema kraja?
Tracer ti je dao valjano rjesenje, koje je i najbolje a i najjednostavnije
Može mi ko reć šta da stisnem za ispis jel ovo unesi broj nema kraja?
Unos ti prestaje kad unese 0.
Može mi ko reć šta da stisnem za ispis jel ovo unesi broj nema kraja?
Uneses nulu i prekinut ce ti se izvodenje programa i ispisati rezultat.
Može mi ko reć šta da stisnem za ispis jel ovo unesi broj nema kraja?
Stisni 0, pa ćeš završiti program.
Tracer ti je dao ogledni algoritam, kako ćeš ga implementirati, tvoja stvar.
Može mi ko reć šta da stisnem za ispis jel ovo unesi broj nema kraja?
Ono je isto kao da je napisao
do
{
//radnja
}
while(pom != 0);
Pa, napiši onda mapu, pače dobro je imati više rješenja, mada je ovdje korištenje indexa niza kao brojača i najjednostavnije i najbolje rješenje.
Jeb* ga jos sam "zelen" sto se tice programiranja, recimo uopce mi nije pala na pamet do...while petlja koju je iskoristio Tracer.
Evo ti moga rjesenja koje ti moze primati sve brojeve u opesgu long long, a i moze se lako promijeniti ako pozelis nesto promijeniti:
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <algorithm>
#include <cstddef>
#include <map>
using namespace std;
typedef long long llint;
template <typename type>
size_t outputWidth(type object){
stringstream ssTemp;
ssTemp<<object;
string sTemp;
ssTemp>>sTemp;
return sTemp.length();
}
template <typename K, typename V>
void printPair(const pair<K,V> output, size_t keyWidth, size_t valueWidth){
cout<<"| "<<setw(keyWidth)<<output.first<<" | "<<setw(valueWidth)<<output.second<<" |"<<endl;
}
template <typename type>
void printRow(type object,size_t times){
for(size_t i = 0;i<times;i++)
cout<<object;
cout<<endl;
}
int main(){
map<llint, llint> numbers;
const string numberHeader("Numbers"),timesHeader("Times");
size_t numberWidth=outputWidth(numberHeader), timesWidth = outputWidth(timesHeader);
llint temp;
do{
cin>>temp;
numbers[temp]++;
numberWidth = max(outputWidth(temp),numberWidth);
timesWidth = max(outputWidth(numbers[temp]),timesWidth);
}while(temp != 0);
printRow('-',numberWidth+timesWidth+7);
printPair(make_pair(numberHeader,timesHeader),numberWidth,timesWidth);
printRow('-',numberWidth+timesWidth+7);
for(map<llint,llint>::iterator it = numbers.begin(); it!= numbers.end(); it++)
printPair(*it,numberWidth,timesWidth);
printRow('-',numberWidth+timesWidth+7);
return 0;
}
Da, defaultno nepostojeći value ima vrijednost 0, dakle ovako.
A za key se uzme string, nije važno koliki je broj, za value broj njegovih ponavljanja.
#include <iostream>
#include <map>
#include<string>
using namespace std;
int main () {
map<string, int> mapa;
map<string, int>::iterator it;
string broj;
int brojBrojeva;
cin>> brojBrojeva;
for(int i=0; i<brojBrojeva; i++)
{
cin>> broj;
mapa[broj] += 1;
}
for(it=mapa.begin(); it!=mapa.end(); it++)
{
cout<< (*it).first << " " << (*it).second << endl;
}
return 0;
}
Zašto ne onda jednostavnije sa mapom, preko if testiraš uvjet imaš li element, ako da, povećavaš za jedan, ako ne, novi element u mapi.
Mene je to defaultnom vrijednosti nekog keya koji jos ne postoji, zbunjivalo. No pronasao sam negdje da ce defaultna vrijednost za int biti 0, pa mislim da ti taj if uvjet nije potreban. Ja sam jos u svom kodu htio fino formatirati ispis u tablicu pa sam zato ovoliko komplicirao, pa ce meni za unos:
INPUT: 23 23 23 23 23 23 23 23 23 23 23 23 1293238 990 312 8 9 0 1 2 3
OUTPUT:
-------------------
| Numbers | Times |
-------------------
| 0 | 1 |
| 8 | 1 |
| 9 | 1 |
| 23 | 12 |
| 312 | 1 |
| 990 | 1 |
| 1293238 | 1 |
-------------------