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.

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