Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Pagalbos su uždaviniais C++


Tomas86

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1823 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

1 uždavinys:

Kredito kortelės numeruojamos vieningai – numerį sudaro 13–16 skaitmenų, iš kurių du ar trys pirmi nusako kortelės tipą, 6 skaičiai nusako kortelę išdavusį banką ar įstaigą (BIN), o likę skaičiai parenkami pagal tam tikras taisykles, leidžiančias lengvai atpažinti klaidingai įvestą kortelės numerį.

Luno algoritmas: kas antras skaičiaus skaitmuo (skaičiuojama iš kairės) dauginamas iš 2, jei daugybos rezultatas dviženklis skaičius, abu jo skaitmenys sudedami. Gauti nauji skaičiaus skaitmenys sudedami. Jeigu gauta skaitmenų suma baigiasi nuliu, tai įvestas numeris yra teisingas.

Pavyzdžiui, identifikacinis kortelės numeris 49927398716 yra teisingas, nes atlikus algoritmą, skaitmenų suma yra lygi 70.

Užduotis. Nustatykite ar įvestas identifikacinis kortelės numeris yra teisingas. Kortelės numeris gali būti bet kokio ilgio skaičius.

 

2 uždavinys:

Kartą gobšus žmogus su nelabuoju sudarė sandorį. Žmogus troško pinigų. Sandoris vyko pirmadienį naktį. Pirmąją naktį žmogus panorėjo A auksinių (1 <= A <= 1000000), kitą pirmadienį – 2A auksinių, kiekvieną pirmadienį vis A auksinių daugiau. Nelabasis sutiko, bet tik su viena sąlyga, esą už pajamas reikėsią mokėti simbolinius mokesčius. Už pirmąją sumą – 1 auksinį, už antrąją – 2 auksinius, už trečiąją – 4 auksinius. Kaskart mokestis dvigubinamas. Gavęs atitinkamą  sumą žmogus turi iš karto sumokėti mokesčius. Jei atsitiktų taip, kad žmogus negalėtų sumokėti mokesčių nelabajam – tas paimtų žmogaus sielą. Taip ir sutarė. Mes jau suprantame, kad žmogus vėlios buvo apgautas. Kelintą pirmadienio naktį nelabasis pasiims to gobšaus žmogelio sielą?

 

Šiuose uždavinuose negali būti naudojami masyvai.

 

 

Redaguota , nario Tomas86
Papildymas
Nuoroda į komentarą
Dalintis per kitą puslapį

naudojant PHP programavimo kalbą padariau šitaip (paprastai). Nemoku C++ kalbos, bet manau kas ją moką kodą galės pakeist.

<?php

$value = 49927398716;
$value_splited = str_split($value);
$new_value = '';

$antras = false;

foreach ($value_splited as $int) {
	$new_value .= ($antras ? (strlen($int*2) == 2 ? array_sum(str_split($int*2)) : $int*2) : $int);
	$antras = ($antras ? false : true);
}


echo $value.' - ivestas<br>';
echo $new_value.' - kodas padare<br><br>';

echo 'skaiciu suma - '.array_sum(str_split($new_value)).'<br><br>';

if(substr(array_sum(str_split($new_value)),-1) == 0)
	echo 'kodas teisingas!';
else
	echo 'kodas neteisingas!';


?>

 

Rezultatas:

image.png.2381e2127006b2be688b4fafe8562522.png

 

Redaguota , nario Vidmantas.
Nuoroda į komentarą
Dalintis per kitą puslapį

1. Užsiknisau 2val. ieškodamas kažko ypatingo, o kaip visada visi šitie uždaviniai išsisprendžia su "mod" :D Surašiau komentarus, tikiuosi, kad pasigilinsi, o ne tik nukopijuosi kodą... 

P.S. Įsirašiau CodeBlocks tik dėl tavęs... :D 

#include <iostream>

using namespace std;

long long cardNumber;
long long mod = 1;
bool second = false;
int temp = 0;
int sum = 0;

int main()
{

    cout << "Iveskite korteles numeri: ";
    cin >> cardNumber;

    //Kol korteles numeris nėra 0 sukam ciklą
    while (cardNumber != 0)
	{
	    //Gaunam skaičius iš eilės
		mod = cardNumber % 10;
        
        //Ar skaičius "kas antras"
		if(second)
        {
            //Padauginam is 2
            mod *= 2;
            
            //jei daugiau nei 10
            if(mod > 9)
            {
                //gaunam pirmą skaičių
                temp = mod % 10;
                //sumažinam dešimtimi
                mod /= 10;
                
                //pakeičiam mod reikšmę į pirmą+likusę
                mod = temp+mod;
            }
        }
        
        //Renkam sumą Luno algoritmui
        sum += mod;

        //Sumažinam kortelės numerį viena dešimtimi
		cardNumber /= 10;
        
        //Nustatom second priešingą reikšmę nei dabar yra PVZ.: 1 = !1 (t.y.: 0) arba 0 = !0 (t.y. 1)
        second = !second;
        
        //sukam ciklą toliau...
	}

    //Tikrinam ar sumą padalinus iš 10 lieka liekana, jei liekana yra 0, reiškia kodas teisingas.
    if((sum % 10) == 0)
        cout << "Korteles kodas TEISINGAS!" << endl;
    else
        cout << "Korteles kodas NETEISINGAS!" << endl;

    return 0;
}

 

2. Tikėjausi sunkiau...

#include <iostream>

using namespace std;

int intA;
long long sumGet;

//Nustatom mokesčius, pirminiai 1
long long taxes = 1;

int main()
{
    cout << "Iveskite A reiksme: ";
    cin >> intA;

    for(int i=1; i <= 1000000; i++)
    {
        //Pridedam gaunama sumą
        sumGet += intA;

        //Atimam mokescius
        sumGet -= taxes;

        //Jei susimokėjus mokescius liko < 0 bankrotas
        if(sumGet < 0)
        {
            cout << "Siela pragane " << i << " pirmadieni." << endl;

            //Stabdom ciklą
            break;
        }

        //padidinam mokesčius 2 kartus
        taxes *= 2;
    }


    return 0;
}

 

Kaip minėjau pradžioje... Nekopijuok aklai... Pasiskaityk kas parašyta, ne šiaip komentarus sudėliojau... Nebent, esi iš tų, kur pasiėmei programavimą, tik šiaip, o mokytis nenori...

Redaguota , nario Psychical
Nuoroda į komentarą
Dalintis per kitą puslapį

Galėjai pridėti kontrolinius duomenis uždaviniams, nes jie buvo duoti. :)
2. Kontroliniai duomenys

 

#include <iostream>
using namespace std;

int main()
{
  	//Kintamieji uždaviniui
    int a, turi, mokestis, savaite;
    cout << "Gobsumas ir klasta" << endl
    << "Kiek auksiniu pageidaujate pirmojo pirmadienio nakti?";
  	//Įvedame kiek norės gošuolis auksinių pirmąją naktį
    cin >> a;
  	//Tikrina ar gobšuolis prašo auksinių tinkamame intervale
    if(a>=1 && a<=1000000){
        //Pirmos savaitės mokestis
        mokestis=1;
        //Kiek turi auksinių pradžioje                  
        turi=0;
        //Pirma savaitė
        savaite=1;
        //Ciklas, kuriame skaičiuoja kiek savaičių prireiks, kol atiduos sielą
        while(turi>=0){
  			//Pridedam prie turimų auksinių kiek norės vis kita savaitę ir atimam mokesčius
            turi=turi+savaite*a-mokestis;
  			//Padidinam mokesčius 2x karto
            mokestis*=2;
  			//Jeigu auksinių vis dar turi arba yra lygu 0 pridedam dar vieną savaitę
            if(turi>=0){
                savaite++;
            }

        }
        cout << savaite << "-aji pirmadieni pasiims siela" << endl
        << "Dekojame, kad skaiciavote. Iki kito karto!";
    } else {
        cout << "Blogas auksiniu kiekis";
    }
    return 0;
}

 

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1823 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...