Pereiti prie turinio

C++ uzduoties pagalba.


Rekomenduojami pranešimai

Padekit ispresti uzduoty, niekaip pats nesugalvoju : )

 

Turime tris indus, kuriuose telpa v1, v2 ir v3 litrų (tūriai - sveikieji skaičiai). Parašykite programą, kuri patikrintų, ar galima šiais indais įpilti tiksliai v litrų (v - sveikas skaičius).

 

Esme tame kad nezinau kaip tikrint ar tilps. Mintys tokios kad tipo labai daug tikrint reikia

v1 + v1 + v1 = v ?

v1 + v2 + v3 = v ?

v1 + v3 = v ?

v1 + v3 + v3 = v ?

Redagavo xTheEc0
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Padekit ispresti uzduoty, niekaip pats nesugalvoju : )

 

Turime tris indus, kuriuose telpa v1, v2 ir v3 litrų (tūriai - sveikieji skaičiai). Parašykite programą, kuri patikrintų, ar galima šiais indais įpilti tiksliai v litrų (v - sveikas skaičius).

O gal tiesiog nori, kad kažkas padarytų ir viskas? Kur pastangos? Čia paprasti dalykai nieko sudėtingo.

 

Kas liečia programą viskas labai paprasta. Pirmiausia įvedi v, o tuomet v3 v2 v1 dalini iš v, pradedi nuo didžiausio kai is didziausio nesidalina , tada liekana imi su mažesniu ir t.t. tol kol liekanos nebelieka, arba liekana bet ipilti tiek negali.

 

if(v1+v2+v3 == v)
cout << "Galima"
else
cout<< "Negalima"

 

Šeip manau užduotis blogai suformuluota čia

manau blogai užduotį supratai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O gal tiesiog nori, kad kažkas padarytų ir viskas? Kur pastangos? Čia paprasti dalykai nieko sudėtingo.

 

Kas liečia programą viskas labai paprasta. Pirmiausia įvedi v, o tuomet v3 v2 v1 dalini iš v, pradedi nuo didžiausio kai is didziausio nesidalina , tada liekana imi su mažesniu ir t.t. tol kol liekanos nebelieka, arba liekana bet ipilti tiek negali.

 

 

manau blogai užduotį supratai.

 

 

Nevisiškai tikslus ir tavo mąstymas. Jei pvz reikės įpilti 10l į 4l 6l ir 7l indus, tai pagal tave pirmiausia 10l padalinsim iš 7, liks 3l, kurie niekur nebetilps. O praktiškai tuos 10l galima sutalpinti į 4l+6l stiklainius. Šitame uždavinyje be 3 ciklų cikluose manau neišiversi...

Redagavo IDK
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nevisiškai tikslus ir tavo mąstymas. Jei pvz reikės įpilti 10l į 4l 6l ir 7l indus, tai pagal tave pirmiausia 10l padalinsim iš 7, liks 3l, kurie niekur nebetilps. O praktiškai tuos 10l galima sutalpinti į 4l+6l stiklainius. Šitame uždavinyje be 3 ciklų cikluose manau neišiversi...

 

Ir tu ne taip supratai.

Turime 3 indus kurie gali paimt kazkoky kieky.

Sakykim 2, 3 ir 7 L. Jeigu reikia uzpildyt 10L, viskas gerai, naudojami 7 ir 3 L indai. Jeigu reikia uzpildyt 11L, turi ismest, kad uzpildyt indo neiseis.

Redagavo xTheEc0
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ir tu ne taip supratai.

Turime 3 indus kurie gali paimt kazkoky kieky.

Sakykim 2, 3 ir 7 L. Jeigu reikia uzpildyt 10L, viskas gerai, naudojami 7 ir 3 L indai. Jeigu reikia uzpildyt 11L, turi ismest, kad uzpildyt indo neiseis.

 

 

Tai aš ir nerašiau kas bus, jei netilps viskas (nes manau pats suvoki, kaip tą patikrinti), aš koncentravausi į tai, kaip spręsti šitą uždavinį, jei indų talpa didesnė už reikiamą supilti kiekį, tačiau reikia paskaičiuoti ar fiziškai įmanoma supilti tą kiekį į duotus 3 indus

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai aš ir nerašiau kas bus, jei netilps viskas (nes manau pats suvoki, kaip tą patikrinti), aš koncentravausi į tai, kaip spręsti šitą uždavinį, jei indų talpa didesnė už reikiamą supilti kiekį, tačiau reikia paskaičiuoti ar fiziškai įmanoma supilti tą kiekį į duotus 3 indus

 

Ne į indus tepilama, o iš indų ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

na tai:

if(v1 == v)
 cout << "Galima";
else if(v2 == v)
 cout << "Galima";
else if(v3 == v)
 cout << "Galima";
else if(v1+v2 == v)
 cout << "Galima";
else if(v1+v3 == v)
 cout << "Galima";
else if(v2+v3 == v)
 cout << "Galima";
else if(v1+v2+v3 == v)
 cout << "Galima";
else
 cout << "Negalima";

Nuoroda į pranešimą
Dalintis kituose puslapiuose

na tai:

if(v1 == v)
 cout << "Galima";
else if(v2 == v)
 cout << "Galima";
else if(v3 == v)
 cout << "Galima";
else if(v1+v2 == v)
 cout << "Galima";
else if(v1+v3 == v)
 cout << "Galima";
else if(v2+v3 == v)
 cout << "Galima";
else if(v1+v2+v3 == v)
 cout << "Galima";
else
 cout << "Negalima";

 

Kitas variantas – turi 3 l, 4 l ir 7 l indus. Reikia gauti 1 l. Tu iš pradžių pripili 4 l indą, o po to nuo jo nupili 3 l ir lieka 1 l.

 

Čia jau yra grafų uždavinys. Reikia pereiti per visus galimas būsenas (kitaip tariant, išpilstymus).

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kitas variantas – turi 3 l, 4 l ir 7 l indus. Reikia gauti 1 l. Tu iš pradžių pripili 4 l indą, o po to nuo jo nupili 3 l ir lieka 1 l.

 

Čia jau yra grafų uždavinys. Reikia pereiti per visus galimas būsenas (kitaip tariant, išpilstymus).

 

Išvedžiojimai čia jau kažkokie..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

nežinau ar tiksliai suprantu uždavinio sąlygą, bet pabadysiu pateikti galimą sprendimą (deja, tokių išimčių kaip rašė wi_lius ši programa neskaičiuoja).

 

#include<iostream>
#define kiek 100

using namespace std;

int main()
{
int V,V1,V2,V3;
cin>>V>>V1>>V2>>V3;

for (int i=0; i<=kiek; i++)
{
   for (int x=0; x<=kiek; x++)
   {
       for (int j=0; j<=kiek; j++)
       {
           if ( V1*i + V2*x + V3*j == V ) {
               cout<<"Tilps ir reikes "<<i<<" kartu pilti is indo "<<V1<<" litru, "<<x<<" kartu is indo po "<<V2<<" litru ir "<<j<<" kartu is indo "<<V3<<" litru."<<endl;
               return 0;
           }
       }
   }
}

cout<<"Netilps :/"<<endl;

return 0;
}

Redagavo IDK
Nuoroda į pranešimą
Dalintis kituose puslapiuose

nežinau ar tiksliai suprantu uždavinio sąlygą, bet pabadysiu pateikti galimą sprendimą (deja, tokių išimčių kaip rašė wi_lius ši programa neskaičiuoja).

 

#include<iostream>
#define kiek 100

using namespace std;

int main()
{
int V,V1,V2,V3;
cin>>V>>V1>>V2>>V3;

for (int i=0; i<=kiek; i++)
{
   for (int x=0; x<=kiek; x++)
   {
       for (int j=0; j<=kiek; j++)
       {
           if ( V1*i + V2*x + V3*j == V ) {
               cout<<"Tilps ir reikes "<<i<<" kartu pilti is indo "<<V1<<" litru, "<<x<<" kartu is indo po "<<V2<<" litru ir "<<j<<" kartu is indo "<<V3<<" litru."<<endl;
               return 0;
           }
       }
   }
}

cout<<"Netilps :/"<<endl;

return 0;
}

 

 

"kiek" nera apibrezto. Ar cia kazkuom pakeist jy reikia?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

ant kelio tik uzvedziau, del kodo ir pats pagalvot gali

 

Siūlyčiau nusileist ant žemės, nes turint omeny, kad tavo kodo gabaliukai sprendžia užduotį "kaip padalinti tris indus į dvi grupes", labai jau mandravoji.

 

Kaip ir minėjau, čia yra grafų uždavinys. Tarkim turi tris indus (v1, v2, v3). Paimi pradinę būseną (0, 0, 0) [t. y. visi indai tušti]. Iš šitos būsenos gali pereiti į būseną (v1, 0, 0) [t. y. pripili pirmą indą], (0, v2, 0) [t. y. pripili antrą indą] arba (0, 0, v3) [t. y. pripili trečią indą]. Kai šitą būseną išnagrinėji, tada eini į kitas būsenas, sugeneruotas iš šitos (tos trys, kur įvardijau). Tada iš tos būsenos gali sugeneruoti dar keletą būsenų (pripili dar vieną indą, išpilti vandenį iš indo arba iš vieno perpili į kitą; reikia nepamiršti, kad perpilant gali visas vanduo netilpti ir dalis vandens likti pradiniame inde). Taip eini per būsenas, vis generuodamas naujas. Algoritmas užbaigiamas, kai randi, kad trijų indų suma yra lygi ieškomam skaičiui arba kai perrenki visas būsenas ir nepavyksta rasti norimo kiekio nė vienoje iš jų.

 

Jei gerai prisimenu, būtent šitą uždavinį teko spręsti per KTU Diskrečiųjų struktūrų modulį.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ne visai tas pats, bet bent jau man taip lengviau apibrėžti konstantas, kurių reikšmės nekinta. Bėda būtų tada, jei KIEK kažkuriuo metu reikėtų incrementuoti ar decrementuoti, tačiau šioje programoje to daryti nereikia.

 

Konstantas galima apsibrėžti ir taip:

const int KIEK = 100;

 

Sakyčiau, kad šitas variantas geresnis nei #define'as.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kita kart switcha rasyk, o ne ifa su 10 else. Dafuq. :)

Tie žmonės kur ideologiškai išmokę (daug if --> switch), bet nežino dėl ko ir kada, tiesiog kartoja kaip papūgos... :) Switch neveiks su nekonstantinėm reikšmėm, kaip yra šiuo atveju.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tie žmonės kur ideologiškai išmokę (daug if --> switch), bet nežino dėl ko ir kada, tiesiog kartoja kaip papūgos... :) Switch neveiks su nekonstantinėm reikšmėm, kaip yra šiuo atveju.

 

Oh, sorry, kaltas uz dezinformacija. Dekui, kita kart pats zinosiu. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jaigu rubi tik galima ar negalima, tada

#include <iostream>
#include <algorithm>


bool search (unsigned v1, unsigned v2, unsigned v3, unsigned v) {
   if (v < std::min (v1, std::min (v2, v3)))
       return false;
   return (v == v1 || v == v2 || v == v3)
       || search (v1, v2, v3, v - v1)
       || search (v1, v2, v3, v - v2)
       || search (v1, v2, v3, v - v3);
}


int main () {
   unsigned v1, v2, v3, v;
   std::cout << "v1 v2 v3 v ?\n";
   std::cin >> v1 >> v2 >> v3 >> v;

   std::cout << (search (v1, v2, v3, v) ? "Galima" : "Negalima") ;

   std::cout << "\n";
   std::cin.ignore ();
   std::cin.get ();
   return 0;
}

Kiek pamodifikavus galima surasti ir kiek kartu su kuriuo indu reiks pilti

Rekursijos naudojimas asku kiek apriboja kiek toli galima ieskoti tokio sprendinio

Redagavo Rintintin
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kitas variantas – turi 3 l, 4 l ir 7 l indus. Reikia gauti 1 l. Tu iš pradžių pripili 4 l indą, o po to nuo jo nupili 3 l ir lieka 1 l.

 

Čia jau yra grafų uždavinys. Reikia pereiti per visus galimas būsenas (kitaip tariant, išpilstymus).

 

Uztenka isrikiuoti gcd(v1,v2), gcd(v2,v3), gcd(v1,v3), tada, jeigu bent kuris is ju dalina galine reiksme, reiskia galima. (Salyga klausia ar galima uzpildyti kazkoki inda litrais(tarkim, begalines talpos))

Redagavo pakartoti
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Uztenka isrikiuoti gcd(v1,v2), gcd(v2,v3), gcd(v1,v3), tada, jeigu bent kuris is ju dalina galine reiksme, reiskia galima. (Salyga klausia ar galima uzpildyti kazkoki inda litrais(tarkim, begalines talpos))

 

v1 = 42;

v2 = 110;

v3 = 195;

v = 1;

 

gcd(v1, v2) = 2;

gcd(v1, v3) = 3;

gcd(v2, v3) = 5;

 

1 div 2 = 0;

1 div 3 = 0;

1 div 5 = 0;

 

Pripilam v3, nupilam 110 l į v2, tada dukart nupilam 42 l į v1. 195 - 110 - 2×42 = 1.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...