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

PrasauPagalboss C++


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1145 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

Sąlyga: Loterijoje laimingi laikomi tie skaičiai, kurie dalinasi be liekanos iš savo skaitmenų sumos. 

Parašykite programą, kuri intervale [n;m] rastų visus laimingus skaičius ir atspausdintų juos ekrane po vieną eilutėje. Pasitikrinkite, kai n=10, m=20.

 

Neįsivaizduoju, kaip užrašyt, jog dalinasi iš savo skaitmenų sumos.

tam, kas atras laiko pagelbėt secsas telefonu

// laimingi sk
#include <iostream>
using namespace std;
int main()
{
int n, m, skaic=0;
cout << "iveskite sk intervala" << endl;
cin >> n >> m;
for (int i=n; i<=10; i++){
?????????????????
cout << i << endl;
skaic++;
}  
return 0;
}

 

 

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

#include <iostream>

using namespace std;

int main()
{
    int n, m, sk1, sk2;

    cout << "Iveskite intervala: " << endl;
    cin >> n >> m;

    for(int i = n; i <= m; i++)
    {
        sk1 = i / 10;
        sk2 = i % 10;

        if(i % (sk1 + sk2) == 0)	cout << i << endl;
    }
    return 0;
}

Nebandžiau, bet pagal mane turėtų veikti.

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

1 minute prieš, Lixi9 parašė:

#include <iostream>

using namespace std;

int main()
{
    int n, m, sk1, sk2;

    cout << "Iveskite intervala: " << endl;
    cin >> n >> m;

    for(int i = n; i <= m; i++)
    {
        sk1 = i / 10;
        sk2 = i % 10;

        if(i % (sk1 + sk2) == 0)	cout << i << endl;
    }
    return 0;
}

Nebandžiau, bet pagal mane turėtų veikti.

aciu labai

Nuoroda į komentarą
Dalintis per kitą puslapį

prieš 2 valandas(-ų), Kadolis parašė:

#include <iostream>

using namespace std;

int main()
{
    int n, m, sk1, sk2;

    cout << "Iveskite intervala: " << endl;
    cin >> n >> m;

    for(int i = n; i <= m; i++)
    {
        sk1 = i / 10;
        sk2 = i % 10;

        if(i % (sk1 + sk2) == 0)	cout << i << endl;
    }
    return 0;
}

Nebandžiau, bet pagal mane turėtų veikti.

o jei skaicius trizenklis?

Nuoroda į komentarą
Dalintis per kitą puslapį

30 minutes prieš, marcus parašė:

o kur praso patikrint, kad skaicius trizenklis? :D

 

prieš 14 valandas(-ų), Nukascia parašė:

Sąlyga: Loterijoje laimingi laikomi tie skaičiai, kurie dalinasi be liekanos iš savo skaitmenų sumos.

Prašyt gal ir neprašo, bet iš esmės teisingas sprendimas būtų jei veiktu ir su triženkliais ir keturženkliais ir t.t. Jei kam įdomu: http://algirdas.jggimnazija.lt/?page_id=2027

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

prieš 5 valandas(-ų), marcus parašė:

o kur praso patikrint, kad skaicius trizenklis? :D

salygoje

prieš 18 valandas(-ų), Nukascia parašė:

Sąlyga: Loterijoje laimingi laikomi tie skaičiai, kurie dalinasi be liekanos iš savo skaitmenų sumos. 

Parašykite programą, kuri intervale [n;m] rastų visus laimingus skaičius ir atspausdintų juos ekrane po vieną eilutėje.

 

Nuoroda į komentarą
Dalintis per kitą puslapį

#include <iostream>
#include <bitset>
#include <cmath>

int getBinaryPlaces(int number);
int getDecimals(int number, int decimals[]);
int getLuckyNumbers(int start, int end, int lNumbers[], int arrSize);

int main()
{
    int start, end;
    std::cout << "[INFO]: Iveskite intervalo pradzia (imtinai): ";
    std::cin >> start;
    std::cout << "[INFO]: Iveskite intervalo pabaiga (imtinai): ";
    std::cin >> end;
    if (start > end) {
        int temp = start;
        start = end;
        end = temp;
    }
    
    std::cout << "[INFO]: Laimingieji skaiciai yra: ";
    int lNumbers[10];
    int size = getLuckyNumbers(start, end, lNumbers, (sizeof(lNumbers) / 4));
    for (int i = 0; i < size; i++) {
        std::cout << lNumbers[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

int getBinaryPlaces(int number) {
    int count = 0;
    int size = sizeof(number)*8; // int = 4 byte = 4*8 bits 
    for (int i = 0; i < size; i++) {
        if ((number >> i) & 0x1) { // if bit with offset i is 1, increment the count
            count = i+1;
        }
    }
    return count;
    
}

int getDecimalPlaces(int number) {
    return !number ? 1 : ceil(static_cast<float>(getBinaryPlaces(number)) / 3); // if number == 0 return 1 else return decimal places from function
}

int getDecimals(int number, int decimals[]) {
    int places = getDecimalPlaces(number);
    int base = pow(10, places-1);
    decimals[0] = number / base;
    for (int i = 1; i < places; i++) {
        number -= decimals[i-1] * base;
        base /= 10;
        decimals[i] = number / base;
    }
    return places;

}

int getLuckyNumbers(int start, int end, int lNumbers[], int arrSize) {
    int size = 0;
    while (start <= end && size < arrSize) {
        int decimals[11];
        int arrLength = getDecimals(start, decimals); 
        int value = 0;
        for (int i = 0; i < arrLength; i++) {
            value += decimals[i];
        }
        if (value != 0 && start % value == 0) {
            lNumbers[size] = start;
            size++;
        }
        start++;
    }
    return size;
}

@Nukascia @Zero Two
Mano universalus sprendimas, kuris apskaiciuoja bet kokio dydžio skaičius. Gal kažkiek atrodo baisokai, bet galiu tuojau pat viską paaiškint:
 

  1. Išgavau skaičiaus ilgį. Ilgai galvojau, kol suradau vieną sprendimą.
    • Panaudojau bitų maskuotes (angl. bit mask) bei bitų manipuliaciją (bit shifting), pagal tai aš galėjau išgauti ar bitas yra tiesa (1/true) arba netiesa (0/false), jeigu bitas yra tiesa, aš išgaudavau paskutinę bito reikšmę iki tol kol baigiasi ciklas (angl. loop), paskutinis bito indeksas nurodo skaičiaus bitų sekos ilgį.
    • Gavęs bitų sekos ilgį, aš galėjau išgauti skaičiaus skaitmenų kiekį? Kaip? Kadangi dviejuose bituose gali tilpti tik iki 3 skaičių (neskaitant nulinės reikšmės): 01 = 1, 10 = 2, 11 = 3, aš padalinau visą seką iš 3, bei suapvalinau į didžiają pusę, bei taip gavau dešimtainės sistemos skaičiaus skaitmenų kiekį iš dvejatainės (angl. base 2) binary sistemos.
  2. Pagal skaičiaus skaitmenų ilgį aš radau visus skaičiaus skaitmenis. Naudojau tapatį principą, kokį @Kadolis nurodė, tik šiek tik optimalesnį variantą, kadangi kompiuteris tada negalvoja reikšmės iš naujo, nes naudoja tapatį kintamąjį, kurį naudojo praeitas ciklas (angl. loop). kintamasis1 % kintamasis2 taspats yra kaip ((static_cast<float>(kintamasis1) / kintamasis2) - (kintamasis1 / kintamasis2)) * kintamasis2. Tas ženklas/operatorius tiesiog nurodo po dalybos, liekaną.
  3. Na ir tada savaime aišku, pagal tai radau laimingus skaičius, kadangi skaičius negali dalintis iš 0, jeigu reikšmė 0 tai jis ir nebus laimingas, viska įkėliau į masyvą ir grąžinau į main funkciją.
  4. Iš main funkcijos padariau klausimus su cin funkcija bei parodžiau laimingus skaičius.

Tikiuosi aiškiai viskas atrodo, bei čia jau toks perfect labai gaunasi sprendimas, toks egzamine VBE nereikalingas, ten duoda limitus lape, kuriais turi remtis, ir šitas sprendimas, daug ėda resursų palyginus su kitais sprendimais, nes reikia kompiuteriui rasti skaičiaus ilgį papildomai bei rasti jo skaičius pačiam. Sėkmės!

Redaguota , nario Dovias
Įdėjau funkcijų prototipus, panaikinau nereikalingą kintamąjį.
Nuoroda į komentarą
Dalintis per kitą puslapį

prieš 13 valandas(-ų), Dovias parašė:

#include <iostream>
#include <bitset>
#include <cmath>

int getBinaryPlaces(int number);
int getDecimals(int number, int decimals[]);
int getLuckyNumbers(int start, int end, int lNumbers[], int arrSize);

int main()
{
    int start, end;
    std::cout << "[INFO]: Iveskite intervalo pradzia (imtinai): ";
    std::cin >> start;
    std::cout << "[INFO]: Iveskite intervalo pabaiga (imtinai): ";
    std::cin >> end;
    if (start > end) {
        int temp = start;
        start = end;
        end = temp;
    }
    
    std::cout << "[INFO]: Laimingieji skaiciai yra: ";
    int lNumbers[10];
    int size = getLuckyNumbers(start, end, lNumbers, (sizeof(lNumbers) / 4));
    for (int i = 0; i < size; i++) {
        std::cout << lNumbers[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

int getBinaryPlaces(int number) {
    int count = 0;
    int size = sizeof(number)*8; // int = 4 byte = 4*8 bits 
    for (int i = 0; i < size; i++) {
        if ((number >> i) & 0x1) { // if bit with offset i is 1, increment the count
            count = i+1;
        }
    }
    return count;
    
}

int getDecimalPlaces(int number) {
    return !number ? 1 : ceil(static_cast<float>(getBinaryPlaces(number)) / 3); // if number == 0 return 1 else return decimal places from function
}

int getDecimals(int number, int decimals[]) {
    int places = getDecimalPlaces(number);
    int base = pow(10, places-1);
    decimals[0] = number / base;
    for (int i = 1; i < places; i++) {
        number -= decimals[i-1] * base;
        base /= 10;
        decimals[i] = number / base;
    }
    return places;

}

int getLuckyNumbers(int start, int end, int lNumbers[], int arrSize) {
    int size = 0;
    while (start <= end && size < arrSize) {
        int decimals[11];
        int arrLength = getDecimals(start, decimals); 
        int value = 0;
        for (int i = 0; i < arrLength; i++) {
            value += decimals[i];
        }
        if (value != 0 && start % value == 0) {
            lNumbers[size] = start;
            size++;
        }
        start++;
    }
    return size;
}

@Nukascia @Zero Two
Mano universalus sprendimas, kuris apskaiciuoja bet kokio dydžio skaičius. Gal kažkiek atrodo baisokai, bet galiu tuojau pat viską paaiškint:
 

  1. Išgavau skaičiaus ilgį. Ilgai galvojau, kol suradau vieną sprendimą.
    • Panaudojau bitų maskuotes (angl. bit mask) bei bitų manipuliaciją (bit shifting), pagal tai aš galėjau išgauti ar bitas yra tiesa (1/true) arba netiesa (0/false), jeigu bitas yra tiesa, aš išgaudavau paskutinę bito reikšmę iki tol kol baigiasi ciklas (angl. loop), paskutinis bito indeksas nurodo skaičiaus bitų sekos ilgį.
    • Gavęs bitų sekos ilgį, aš galėjau išgauti skaičiaus skaitmenų kiekį? Kaip? Kadangi dviejuose bituose gali tilpti tik iki 3 skaičių (neskaitant nulinės reikšmės): 01 = 1, 10 = 2, 11 = 3, aš padalinau visą seką iš 3, bei suapvalinau į didžiają pusę, bei taip gavau dešimtainės sistemos skaičiaus skaitmenų kiekį iš dvejatainės (angl. base 2) binary sistemos.
  2. Pagal skaičiaus skaitmenų ilgį aš radau visus skaičiaus skaitmenis. Naudojau tapatį principą, kokį @Kadolis nurodė, tik šiek tik optimalesnį variantą, kadangi kompiuteris tada negalvoja reikšmės iš naujo, nes naudoja tapatį kintamąjį, kurį naudojo praeitas ciklas (angl. loop). kintamasis1 % kintamasis2 taspats yra kaip ((static_cast<float>(kintamasis1) / kintamasis2) - (kintamasis1 / kintamasis2)) * kintamasis2. Tas ženklas/operatorius tiesiog nurodo po dalybos, liekaną.
  3. Na ir tada savaime aišku, pagal tai radau laimingus skaičius, kadangi skaičius negali dalintis iš 0, jeigu reikšmė 0 tai jis ir nebus laimingas, viska įkėliau į masyvą ir grąžinau į main funkciją.
  4. Iš main funkcijos padariau klausimus su cin funkcija bei parodžiau laimingus skaičius.

Tikiuosi aiškiai viskas atrodo, bei čia jau toks perfect labai gaunasi sprendimas, toks egzamine VBE nereikalingas, ten duoda limitus lape, kuriais turi remtis, ir šitas sprendimas, daug ėda resursų palyginus su kitais sprendimais, nes reikia kompiuteriui rasti skaičiaus ilgį papildomai bei rasti jo skaičius pačiam. Sėkmės!

Jei noretum padaryti dar tobulesni, galetum padaryti su skaiciais didesniais uz int limita :D

As asmeniskai nesu megejas skaiciu dalybos ir mod naudojimo, tai tikriausiai all-round sprendimas galetu buti panaudojant string'us, tada galetum betkokio dydzio skaicius irasyti, nes dabar capped butu ant 2^32

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1145 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ą...