C++ zadatak!?

poruka: 6
|
čitano: 1.834
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
11 godina
neaktivan
offline
C++ zadatak!?

Rješavao sam zadatak sa Infokupa po imenu Golum:

 

Zadatak: Golum

60 bodova

Priča o „gonetanju“ ili „Kako je Bilbo nadmudrio Goluma“, još se i danas prepričava u Meñuzemlju, uz

vatru u dugim i hladnim zimskim noćima. Nažalost, neke zagonetke i problemi koje je Golum zadavao

Bilbu su se vremenom zaboravili i prestali prepričavati.

U jednoj takvoj zagonetci, Golum bi zamislio riječ (niz velikih slova engleske abecede). Svako slovo u

toj riječi bi zamijenio jednim brojem. Tako dobivene brojeve je redom zapisao jedan pored drugog,

bez razmaka, dobivši na taj način jedan novi broj. Pri tome je slova zamjenjivao brojevima na sljedeći

način:

A 0

B 1

C 2

D 3

E 4

F 5

G 6

H 7

I 8

J 9

K 10

L 11

M 12

N 13

O 14

P 15

Q 16

R 17

S 18

T 19

U 20

V 21

W 22

X 23

Y 24

Z 25

Tako dobiven broj predao je Bilbu koji je trebao otkriti o kojoj se riječi tu radi. Meñutim, bez razmaka u

broju, Bilbo je morao isprobati sve moguće kombinacije. Npr. riječ BCD nakon zamjene slova

brojevima postaje 123, a to je Bilbo mogao shvatiti kao BCD (1 2 3) ali i kao MD (12 3) i BX (1 23).

Naravno, neke od tih kombinacija nisu predstavljale riječ jer samo brojevi od nula do 25 imaju svoje

pripadajuće slovo. Na kraju, Bilbo je nekako shvatio da je Golum sigurno zamislio najdulju riječ koja

se može dobiti iz tog broja. Bilbo takoñer zna da Golum nije zamislio riječ koja počinje s A.

Napiši program koji će na osnovu zadanog broja odrediti i ispisati koliko je riječi moguće kreirati iz

tog broja te koju je to riječ Golum bio zamislio.

ULAZNI PODACI

U prvom retku nalazi se jedan prirodan broj N (1 ≤ N ≤ 9999), broj dobiven opisanim zamjenjivanjem

slova brojevima.

IZLAZNI PODACI

U prvom retku treba ispisati broj riječi koje je moguće kreirati.

U drugi redak treba ispisati riječ koju je Golum zamislio.

BODOVANJE

Posebno se boduje točan ispis svakog retka pri čemu svaki vrijedi ½ ukupne vrijednosti test primjera

 

 

 

 

Nisam rešio celi zadatak nego samo jedan dio no problem da kada ispitujem unosno polje ono je 835624.

Evo koda:

 

 

#include <cstdlib>

#include <iostream>

#include <stdio.h>

#include <ctype.h>

using namespace std;

 

int main()

{

   char slova[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z'};

   int niz[4],broj=0,a,polje=0;

   cin>>a;

   for(; a>0; a /= 10)

   {

   niz[polje];

   ++polje;    

   broj++;

   } 

   cout<<broj<<endl<<niz[0]<<endl; //ovdje polje niz[0] mi je 827384 ili šta već

   if(broj==1);

   cout<<slova[niz[0]]<<endl;

   system("PAUSE");

   return 0;

}

 

Zato ljudi pomagajte {#}.

LP-Linkin Park
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: C++ zadatak!?

Ne postoji već C++ tema? Treba svatko svoju za svoj zadatak?

To understand what recursion is, you must first understand recursion.
13 godina
neaktivan
offline
Re: C++ zadatak!?

Najs, šteta što toga nije bilo u moje doba.

 

Rješenje u C++ ne znam, ali u Pythonu 3:

 

KLJUC = {str(i): z for i, z in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZ')}

def broj_rijeci(n):
    if len(n) < 2:
        return 1
    elif n[:2] in KLJUC:
        return broj_rijeci(n[1:]) + broj_rijeci(n[2:])
    else:
        return broj_rijeci(n[1:])

n = int(input('Unesi broj:'))
print('Broj riječi:', broj_rijeci(str(n)))
print('Golumova riječ:', ''.join(KLJUC[z] for z in str(n)))

15 godina
neaktivan
offline
C++ zadatak!?

 

 

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <ctype.h>

using namespace std;

int main()
{
    char slova[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z'};
    int niz[4], broj = 0, a, polje = 0;

    cin >> a;

    for (; a > 0; a /= 10)
    {
       niz[polje];
        ++polje;
        broj++;
    }

    cout << broj << endl << niz[0] << endl; //ovdje polje niz[0] mi je 827384 ili šta već. To je najnormalnija stvar jer mu nigdje nisi dodijelio vrijednost.

   if (broj == 1);
        cout << slova[niz[0]] << endl;

    system("PAUSE");
    return 0;
}

 

Žuto: što se tu točno događa? Koja je vrijednost niz[0], niz[1], niz[2] i niz[3] nakon završetka petlje? Nemaš nikakvo dodjeljivanje vrijednosti niti je polje niz inicijalizirano, stoga se u njemu nalazi smeće koje ti se ispiše na ekran.

 

Zeleno: točkazarez je tu višak. Ako ga ostaviš tu tada ti se taj 'if' ne odnosi na ovu liniju ispod njega, odnosno ona će se izvršiti neovisno o tome da li je broj jednak jedan ili nije.

 

To understand what recursion is, you must first understand recursion.
Poruka je uređivana zadnji put uto 21.1.2014 2:19 (rustweaver).
 
0 0 hvala 0
15 godina
neaktivan
offline
C++ zadatak!?

Pozdrav, trebalo bi mi rijesit dva zadatka jer se iskreno ne snalazim u tome, ozbiljni samo... platit cu ako treba,nekome vrijeme samo da zadaci rade.


mozete se javit na PP ILI 0951980974 

Moj PC  
0 0 hvala 0
11 godina
neaktivan
offline
C++ zadatak!?

Prouči malo dinamičko programiranje , ovo je vrlo jednostavna dinamika

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice