Napisati program kojim se za dati prirodan broj određuje i ispisuje poslednja cifra različita od nule proizvoda 1*2*3*...*n.
Na primer, za n=7 proizvod je 1*2*3*4*5*6*7=5040, pa je traženi rezultat 4.
Moje sklepano rešenje je:
Code:
#include<iostream>
using namespace std;
int faktorijel(int n){
int i,f;
for(i=f=1; i<=n;f*=i++);
return f;
}
int main(){
int n, duzina,pomocna, X,zadnja,i;
char string[30];
cout<<"Unesite neki prirodan broj:";
cin>>n;
X=faktorijel(n);
cout<<"Faktorijel unetog broja je: "<<X<<endl;
sprintf(string,"%d",X);
duzina=strlen(string);
for(i=0;i<duzina;i++){
pomocna=string[i]-48;
if(pomocna!=0) zadnja=pomocna;
}
cout<<"Zadnja cifra razlicita od nule je: "<<zadnja<<endl;
system("PAUSE");
return 0;
}
#include<iostream>
using namespace std;
int faktorijel(int n){
int i,f;
for(i=f=1; i<=n;f*=i++);
return f;
}
int main(){
int n, duzina,pomocna, X,zadnja,i;
char string[30];
cout<<"Unesite neki prirodan broj:";
cin>>n;
X=faktorijel(n);
cout<<"Faktorijel unetog broja je: "<<X<<endl;
sprintf(string,"%d",X);
duzina=strlen(string);
for(i=0;i<duzina;i++){
pomocna=string[i]-48;
if(pomocna!=0) zadnja=pomocna;
}
cout<<"Zadnja cifra razlicita od nule je: "<<zadnja<<endl;
system("PAUSE");
return 0;
}
Sledeći zadatak sam rešio na još ružniji način:
Date su količine R vrsta robe i veličine V vreća (R,V<=100). Količine roba i veličine vreća su
date redom od najmanje do najveće. Potrebno je što više vrsta robe spakovati u vreće, tako da se različite vrste robe ne mešaju i da svaka roba bude u samo jednoj vreći. Napisati program koji učitava date podatke i ispisuje koliko se najviše vrsta robe može spakovati na ovaj način.
Primer : Ulaz : R=5, robe : 1, 3, 5, 7, 9; V=3, vreće : 2, 3, 4 ; Izlaz : 2
Ulaz : R=4, robe : 5, 7, 9, 11 ; V=5, vreće : 4, 5, 6, 7, 10 ; Izlaz : 3
Ulaz : R=5, robe : 2, 3, 4, 5, 6 ; V=4, vreće : 5, 6, 7, 8 ; Izlaz : 4
moje ubogo rešenje:
Code:
#include<iostream>
using namespace std;
int main(){
int R,V,i,j, niz1[50], niz2[50], brojac=0;
cout<<"\nUnesite broj vrsta robe R= ";
cin>>R;
for(i=0;i<R;i++){
cout<<"\nUnesite "<<i+1<<". kolicinu robe: ";
cin>>niz1[i];
}
cout<<"\nUnesite broj razlicitih velicina vreca V= ";
cin>>V;
for(j=0;j<V;j++){
cout<<"\nUnesite "<<j+1<<". velicinu vrece: ";
cin>>niz2[j];
}
prekid1:
for(j=V-1;j>=0;j--){
prekid2:
for(i=R-1;i>=0;i--){
if(niz1[i]<=niz2[j]){
brojac++;
V--;
R--;
goto prekid1;}
else{R--; goto prekid2;}}}
cout<<"\nNa ovaj nacin se moze spakovati najvise "<<brojac<<" vrsta roba.\n"<<endl;
system("PAUSE");
return 0;
}
#include<iostream>
using namespace std;
int main(){
int R,V,i,j, niz1[50], niz2[50], brojac=0;
cout<<"\nUnesite broj vrsta robe R= ";
cin>>R;
for(i=0;i<R;i++){
cout<<"\nUnesite "<<i+1<<". kolicinu robe: ";
cin>>niz1[i];
}
cout<<"\nUnesite broj razlicitih velicina vreca V= ";
cin>>V;
for(j=0;j<V;j++){
cout<<"\nUnesite "<<j+1<<". velicinu vrece: ";
cin>>niz2[j];
}
prekid1:
for(j=V-1;j>=0;j--){
prekid2:
for(i=R-1;i>=0;i--){
if(niz1[i]<=niz2[j]){
brojac++;
V--;
R--;
goto prekid1;}
else{R--; goto prekid2;}}}
cout<<"\nNa ovaj nacin se moze spakovati najvise "<<brojac<<" vrsta roba.\n"<<endl;
system("PAUSE");
return 0;
}
Iako rade mislim da su antiprimeri kako treba programirati u C++, bio bih veoma zahvalan kad bi mi neko objasnio kako da poboljšam stil i da ovo napišem da liči na nešto. Naravno, gotova drugačija rešenja bi bila od velike pomoći. Hvala.
[Ovu poruku je menjao X Files dana 02.03.2011. u 07:10 GMT+1]
[Ovu poruku je menjao X Files dana 02.03.2011. u 07:11 GMT+1]