10070 - Leap Year or Not Leap Year and ...

All about problems in Volume 100. If there is a thread about your problem, please use it. If not, create one with its number in the subject.

Moderator: Board moderators

Post Reply
soyoja
Experienced poster
Posts: 106
Joined: Sun Feb 17, 2002 2:00 am
Location: Seoul, South Korea
Contact:

10070 - Leap Year or Not Leap Year and ...

Post by soyoja » Tue May 07, 2002 5:47 pm

It's so strange problem. Its code is so simple, and I programmed it

easy. But I got wrong answer. I declared three boolean variables,

( check leap year, hulucul, bulukulu ) and check each of year.

Here is my pseudocode
=====================================

[cpp]// leap means leap year,
// hulu means huluculu festival year
// baku means bulukulu festival year

if( year%4 == 0 )
{
if( year%100 == 0 )
if( year%400 == 0 ) leap = true;
else leap = false;
else leap = true;
}

if( year%15 == 0 ) hulu = true;
if( leap && year%55 == 0 ) bulu = true;

check each year type and print...[/cpp]=====================================

Which of my code ( or solution ) is wrong?

Please give me some hint .

Thanks you.

10153EN
Experienced poster
Posts: 148
Joined: Sun Jan 06, 2002 2:00 am
Location: Hong Kong
Contact:

HI~

Post by 10153EN » Tue May 07, 2002 7:23 pm

In the problem description it states that "All the years will not be less than 2000 (to avoid the earlier different rules for leap years). Please don

cyfra
Experienced poster
Posts: 144
Joined: Thu Nov 22, 2001 2:00 am
Location: Gdynia, Poland

Another problem

Post by cyfra » Tue May 14, 2002 2:56 pm

Hi!

I have another problem connected with this task...
It is written :
If the year is not leap year print the line 'This is an ordinary year.'
But in the sample input it is

4515

And the answer :

This is huluculu festival year.


But this is not the leap year so shouldn't be there: This is an ordinary year written ???

I have no idea...

Please tell me where my mistake is, because I have no idea :-?

Caesum
Experienced poster
Posts: 225
Joined: Fri May 03, 2002 12:14 am
Location: UK
Contact:

Post by Caesum » Tue May 14, 2002 6:29 pm

only print 'ordinary year' when none of the others applies, and handle big input, eg 987593475934857300000000

koniloni
New poster
Posts: 15
Joined: Thu Apr 18, 2002 5:10 am

Help problem 10070

Post by koniloni » Fri Jun 07, 2002 8:11 am

Can you tell me what is wrong with my problem code? I get "wrong answer".This is my code:
#include<stdio.h>
int main()
{
unsigned long year;
int c;
while(scanf("%ld",&year)==1)
{
if(year>=2000)
{
c=0;
if(year%4==0 || year%400==0 || year%55==0)
{
printf("This is leap year");
c++;
}
if(year%15==0)
{
if(c==1)
printf("\nThis is huluculu festival year");
else
printf("This is huluculu festival year");
c++;
}
if(year%55==0)
{
if(c>0)
printf("\nThis is buluculu festival year");
else
printf("This is buluculu festival year");
c++;
}
if(c==0)
printf("This is an ordinary year");
printf("\n\n");
}
}
return 0;
}

10153EN
Experienced poster
Posts: 148
Joined: Sun Jan 06, 2002 2:00 am
Location: Hong Kong
Contact:

Post by 10153EN » Fri Jun 07, 2002 7:04 pm

You have made the same mistake~~

Have you assumed unsigned long can store the year value without overflow? The value can be larger.

Remember, don't assume anything other than the description stated.

koniloni
New poster
Posts: 15
Joined: Thu Apr 18, 2002 5:10 am

Help problem 10070

Post by koniloni » Sat Jun 15, 2002 5:24 am

What can I do now?Can you give me any idea?

10153EN
Experienced poster
Posts: 148
Joined: Sun Jan 06, 2002 2:00 am
Location: Hong Kong
Contact:

Post by 10153EN » Sat Jun 15, 2002 8:37 am

I solved this problem by storing the year number (which can be very large) in an integer array. Then check this year with some number theory.

For example, if a numbe if divible by 3, then the sum of all of it's digits is ....

hongping
New poster
Posts: 11
Joined: Fri Jul 26, 2002 5:43 pm

still cannot solve

Post by hongping » Fri Jul 26, 2002 6:01 pm

Hmm... I tried implementing a large array and some number theory to check for divisibility... but this still doesnt work. perhaps someone could help me spot my mistake please? thanks a lot!

#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <stdio.h>

void main()
{
long long y;
char yr[5000002];
int x=0,l;
while (gets(yr))
{
char yy[100];
long z=strlen(yr);
long i;
int ok=0;
if (strlen(yr)>5)
{
sprintf (yy,"%c%c%c%c%c", yr[z-5], yr[z-4], yr[z-3], yr[z-2], yr[z-1]);
}
else
strcpy(yy,yr);
y=atol(yy);
l=0;
if ((y%4==0 && y%100!=0) || (y%400==0))
{
ok=1;
cout << "This is leap year.\n";
l=1;
}
if (y%5==0)
{
y=0;
for (i=0;i<z;i++)
{
y=(y+yr)%3;
}
if (y%3==0)
{
ok=1;
cout << "This is huluculu festival year.\n";
}

y=0;
for (i=0;i<z;i++)
{
if (i%2)
y=(y+yr)%11;
else
y=(y-yr)%11;

}
if (l && (y%11==0))
{
ok=1;
cout << "This is bulukulu festival year.\n";
}
}
if (!ok)
cout << "This is an ordinary year.\n";

cout << endl;
}
}

soniajahid
New poster
Posts: 1
Joined: Tue Jul 30, 2002 7:31 pm
Location: Bangladesh

10070 EASY BUT WA

Post by soniajahid » Tue Jul 30, 2002 9:13 pm

#include<stdio.h>
#include<string.h>

#define MAX 5000

char year[MAX];
int leap,bul,hul;

void checkLeap()
{
long len,i,count;
long tot=0;

len=strlen(year);


if((year[len-1]=='0')&&(year[len-2]=='0'))
{
i=len-2;
for(count=len-4;count<i;count++)
if(count>=0)
tot=tot*10+(year[count]-'0');

if(!(tot%4))
{
leap=1;
return;
}
}
else
{
if((len-2)>=0)
tot=(year[len-2]-'0');
if((len-1)>=0)
tot=tot*10+(year[len-1]-'0');

if(!(tot%4))
{
leap=1;
return;
}
}
}
void checkHul()
{
long i;
long len;
long tot=0;

len=strlen(year);

if((year[len-1]=='5')||(year[len-1]=='0'))
{
for(i=0;i<len;i++)
tot+=(year-'0');

if(!(tot%3))
hul=1;
}
return;
}

void checkBul()
{
long i,len;
len=strlen(year);

long odd=0,even=0,chk;

if(leap)
{
if((year[len-1]=='0')||(year[len-1]=='5'))
{
for(i=0;i<len-2;i+=2)
{
odd+=(year-'0');
even+=(year[i+1]-'0');
}

chk=odd-even;
if(chk<0)
chk=-chk;
if(!(chk%11))
bul=1;
}
}
return;
}
void main()
{
int testCase=0;

for(;;)
{
if(1!=scanf("%s",year))
break;

if(testCase)
printf("\n");
leap=hul=bul=0;
checkLeap();
checkHul();
checkBul();

if(leap)
printf("This is leap year.\n");
if(hul)
printf("This is huluculu festival year.\n");
if(bul)
printf("This is bulukulu festival year.\n");

if(!leap&&!hul&&!bul)
printf("This is an ordinary year.\n");

testCase++;
}

}
I can't mark my mistake..........can anyone help me??

chaojinn
New poster
Posts: 6
Joined: Fri Apr 19, 2002 12:34 pm

long is not enough

Post by chaojinn » Wed Jul 31, 2002 4:56 am

you should use string to read the year

chaojinn
New poster
Posts: 6
Joined: Fri Apr 19, 2002 12:34 pm

me w/a too,help!!!

Post by chaojinn » Wed Jul 31, 2002 1:23 pm

#include "iostream.h"
#include "stdlib.h"
#include "string.h"
#include "stdio.h"

struct str
{
char base[100000];
int len;
};

bool mod3(str year)
{
long sum;
div_t t;
sum=0;
int i;
for(i=0;i<year.len;i++)
sum+=(year.base-'0');
t=div(sum,3);
if(t.rem==0)
return true;
return false;
}

bool mod4(str year)
{
div_t t;
t=div((year.base[year.len-2]-'0'),2);
if(t.rem==0)
{
if(((year.base[year.len-1]-'0')==0)
||((year.base[year.len-1]-'0')==4)
||((year.base[year.len-1]-'0')==8))
return true;
}
else
if(((year.base[year.len-1]-'0')==2)
||((year.base[year.len-1]-'0')==6))
return true;
return false;
}

bool mod5(str year)
{
if((year.base[year.len-1]=='0')||(year.base[year.len-1]=='5'))
return true;
return false;
}

bool mod11(str year)
{
int i;
i=0;
long sum1,sum2;
sum1=0;
sum2=0;
while(i<year.len)
{
sum1+=(year.base-'0');
i+=2;
}
i=1;
while(i<year.len)
{
sum2+=(year.base-'0');
i+=2;
}
if(sum1==sum2)
return true;
return false;
}

bool mod100(str year)
{
if(((year.base[year.len-2]-'0')==0)&&((year.base[year.len-1]-'0')==0))
return true;
return false;
}

bool mod400(str year)
{
div_t t;
t=div((year.base[year.len-4]-'0'),2);
if(((year.base[year.len-2]-'0')==0)&&((year.base[year.len-1]-'0')==0))
{
if(t.rem==0)
{
if(((year.base[year.len-3]-'0')==0)
||((year.base[year.len-3]-'0')==4)
||((year.base[year.len-3]-'0')==8))
return true;
}
else
if(((year.base[year.len-3]-'0')==2)
||((year.base[year.len-3]-'0')==6))
return true;
}
return false;
}


bool isleap(str year)
{
bool f1,f2,f3;
f1=mod4(year);
f2=mod100(year);
f3=mod400(year);
if((f1&&(!f2))||f3)
return true;
else
return false;
}

bool ishf(str year)
{
if(mod3(year)&&mod5(year))
return true;
else
return false;
}


bool isbf(str year)
{
if(mod11(year)&&mod5(year)&&isleap(year))
return true;
else
return false;
}

void main()
{
str year;
bool f;
while(!feof(stdin))
{
f=false;
gets(year.base);
year.len=strlen(year.base);
if(isleap(year))
{
puts("This is leap year.");
f=true;
}
if(ishf(year))
{
puts("This is huluculu festival year.");
f=true;
}
if(isbf(year))
{
puts("This is bulukulu festival year.");
f=true;
}
if(!f)
puts("This is an ordinary year.");
puts("");
}
}

hongping
New poster
Posts: 11
Joined: Fri Jul 26, 2002 5:43 pm

Solution for 10070

Post by hongping » Sun Aug 11, 2002 7:35 am

I have learnt another (perhaps easier) way of calculating the modulus of long integers. Thanks to Jiawei for letting me see his source code. Here is my accepted solution.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream.h>

char a[10000000];

void main(void){
int i,leap,ord,f=1;
while (cin >> a){
if (f)
f=0;
else
cout << endl;
int mod4,mod100,mod400,mod15,mod55;
mod4=mod100=mod400=mod15=mod55=0;
ord=1;leap=0;
for (i=0;i<strlen(a);i++)
{
mod4=(mod4*10+a-'0')%4;
mod100=(mod100*10+a-'0')%100;
mod400=(mod400*10+a-'0')%400;
mod15=(mod15*10+a-'0')%15;
mod55=(mod55*10+a-'0')%55;
}
if ((!mod4 && mod100) || !mod400)
{
leap=1;
ord=0;
cout << "This is leap year.\n";
}
if (!mod15)
{
ord=0;
cout << "This is huluculu festival year.\n";
}
if (leap && !mod55)
{
ord=0;
cout << "This is bulukulu festival year.\n";
}
if (ord)
cout << "This is an ordinary year.\n";

}
}

Meng-Hsuan Wu
New poster
Posts: 5
Joined: Thu Aug 22, 2002 9:41 am
Location: Taiwan
Contact:

10070 Output Limit Exceeded

Post by Meng-Hsuan Wu » Fri Aug 23, 2002 4:19 pm

This is my source code for problem 10070. When I ran it on my computer, it worked well when I input a long number. But I got "Output Limit Exceeded" when I submit it. Can anyone help me?
[c]#include <stdio.h>
#include <string.h>
main()
{
char s[10000];
int y[10000];
int len,i,m400,m15,m55,l,h,b,f=1,pass=1;
do{
gets(s);
len=strlen(s);
if(len==0||s[0]<48||s[0]>57)
break;
for(i=9999;i>=len;i--)
y=0;
for(i=len-1;i>=0;i--)
if(s[len-1-i]>=48&&s[len-1-i]<=57)
y=s[len-1-i]-48;
else
pass=0;
if(pass==0)
break;
m400=(y[2]*100+y[1]*10+y[0])%400;
m15=y[len-1];
for(i=len-2;i>=0;i--)
m15=(m15*10+y)%15;
m55=y[len-1];
for(i=len-2;i>=0;i--)
m55=(m55*10+y)%55;
if(f==0)
printf("\n");
f=0;
l=h=b=0;
if((m400%4==0&&m400%100!=0)||m400==0)
l=1;
if(m15==0)
h=1;
if(l==1&&m55==0)
b=1;
if(l==1)
printf("This is leap year.\n");
if(h==1)
printf("This is huluculu festival year.\n");
if(b==1)
printf("This is bulukulu festival year.\n");
if(l+h+b==0)
printf("This is an ordinary year.\n");
}while(1);
}[/c]

haaaz
New poster
Posts: 29
Joined: Sun Sep 08, 2002 8:02 am

Re: me w/a too,help!!!

Post by haaaz » Sat Oct 26, 2002 6:59 am

chaojinn wrote:#include "iostream.h"
bool mod11(str year)
{
int i;
i=0;
long sum1,sum2;
sum1=0;
sum2=0;
while(i<year.len)
{
sum1+=(year.base-'0');
i+=2;
}
i=1;
while(i<year.len)
{
sum2+=(year.base-'0');
i+=2;
}
if(sum1==sum2)
return true;
return false;
}



it should be

Code: Select all

((sum1-sum2)%11 == 0)

Post Reply

Return to “Volume 100 (10000-10099)”