Pereiti prie turinio

Rekomenduojami pranešimai

Kiek suprantu, sunkiausia uždavinio dalis yra surasti savaitės dieną. Lengviausias būdas yra pasinaudoti šiuo algoritmu:

// Savaites diena
int dow(int y, int m, int d) // y-metai m-menuo d-diena
  {
      static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
      y -= m < 3;
      return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; //0=sekmadienis, 1=pirmadienis,...
  }

http://en.wikipedia.org/wiki/Calculating_the_day_of_the_week#Sakamoto.27s_algorithm

 

arba galima surasti kiek dienų praėjo nuo 0000 metų, ir rasti savaitės dieną su liekanos (%) ženklu:


int pirma_metu_diena(int metai)
{
int n_kel=0; // kiek buvo keliamuju metu nuo 0000 metu

for(int i=0;i<metai;i++)
  if(ar_keliamieji(i)==true)
      n_kel++;

unsigned int viso_dienu=365*(metai-n_kel) + 366*n_kel-1;

cout <<"Pirma "<<metai<<" metu savaites diena: "<<viso_dienu%7<<endl;
}

Redagavo rimcx
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kiek suprantu, sunkiausia uždavinio dalis yra surasti savaitės dieną. Lengviausias būdas yra pasinaudoti šiuo algoritmu:

// Savaites diena
int dow(int y, int m, int d) // y-metai m-menuo d-diena
  {
      static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
      y -= m < 3;
      return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; //0=sekmadienis, 1=pirmadienis,...
  }

http://en.wikipedia.org/wiki/Calculating_the_day_of_the_week#Sakamoto.27s_algorithm

 

arba galima surasti kiek dienų praėjo nuo 0000 metų, ir rasti savaitės dieną su liekanos (%) ženklu:


int pirma_metu_diena(int metai)
{
int n_kel=0; // kiek buvo keliamuju metu nuo 0000 metu

for(int i=0;i<metai;i++)
  if(ar_keliamieji(i)==true)
      n_kel++;

unsigned int viso_dienu=365*(metai-n_kel) + 366*n_kel-1;

cout <<"Pirma "<<metai<<" metu savaites diena: "<<viso_dienu%7<<endl;
}

tai čia būtų visas sprendimas kur parašiai ar kaip? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose
#inclue <iostream>
using namespace std;
int men_dienu[]={0,31,28,31,30,31,30,31,31,30,31,30,31};


bool ar_keliamieji(int metai)
{
 if(metai%400==0 || (metai%100!=0 && metai %4==0))
     return true;
 else
     return false;
}


int savaites_diena(int metai,int menuo, int diena)
{
int n_kel=0; // kiek buvo keliamuju metu nuo 0000 metu

for(int i=0;i<metai;i++)
  if(ar_keliamieji(i)==true)
      n_kel++;

unsigned int viso_dienu=365*(metai-n_kel) + 366*n_kel-1;

for(int i=0;i<menuo;i++)
    viso_dienu+=men_dienu[i];

if(ar_keliamieji(metai))
   viso_dienu+=1;

viso_dienu+=diena;

return viso_dienu%7;
}





int main()
{
int pradzia,pabaiga;

cout <<"Iveskite metu intervala, pvz: 2007 2012"<<endl;
cin >>pradzia>>pabaiga;



int n_pn=0,n_st=0,n_sk=0;

for(int i=pradzia;i<pabaiga;i++)
 {
    for(int j=1;j<=12;j++)
      {
        for(int k=0;k<men_dienu[j];k++)
          {
            int d=savaites_diena(i,j,k);
            if(d==5)
                n_pn++;
             else if(d==6)
                n_st++;
             else if(d==0)
                n_sk++;
          }
          if(n_pn==5 && n_st==5 && n_sk==5)
                cout <<i<<" metu "<<j<<" menuo turi 5 penktadienius, 5 sestadienius ir 5 sekmadienius"<<endl;
           n_pn=0,n_st=0,n_sk=0;
      }
 }
}

Redagavo rimcx
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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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