c/c++语言编程序

如题所述

#include <stdio.h>

#define ISLEAP(y) ((y)%400==0||(y)%4==0&&(y)%100!=0)

int zeller(int year,int month,int day);
int func(int year,int month,int num,int week);

int main(void) 
{
int a,c,b,y1,y2,i,date;
while(scanf("%d%d%d%d%d",&a,&b,&c,&y1,&y2)!=EOF)
{
for(i=y1;i<=y2;++i)
{
if(date=func(i,a,b,c))
{
printf("%d/%02d/%02d\n",i,a,date);
}
else
{
printf("none\n");
}
}
}
return 0;
}

int zeller(int year,int month,int day)
{
int c,y,week;
if(month==1||month==2)
{
year--;
month+=12;
}
c=year/100;
y=year-c*100;
week=(c/4)-2*c+(y+y/4)+(13*(month+1)/5)+day-1;
while(week<0){week+=7;}
week%=7;
return week;
}

int func(int year,int month,int num,int week)
{
int date[]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,cnt;
date[1]+=ISLEAP(year);
for(i=1,cnt=0;i<=date[month-1];++i)
{
if(zeller(year,month,i)==week%7)
{
if(++cnt==num)
{
return i;
}
}
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-29
#include <stdio.h>
#include <math.h>
int main()
{
int y1, y2;
int a, b, c;
scanf("%d%d%d%d%d", &a, &b, &c, &y1, &y2);

for (int j=y1; j<=y2; j++)
{
int days = 0;
int flag = 0;
int temp = 0;
int day = 0;
int count = 0;
int week = 0;
for (int i=1850; i<j; i++)
{
if (i%400 == 0 || ((i%4 == 0) && (i%100)!=0))
{
days += 366;
}
else
{
days += 365;
}
}
for (int k=1; k<a; k++)
{
switch(k)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 1;
days += 31;
break;
case 2:
day = 2;
days += 28;
break;
case 4:
case 6:
case 9:
case 11:
day = 3;
days += 30;
default:
break;
}
}

//判断这里出了问题
flag = (days + 1 + 1) % 7; //b月的1号为星期几
switch(flag)
{
case 0:
week = 1;
break;
case 1:
week = 2;
break;
case 2:
week = 3;
break;
case 3:
week = 4;
break;
case 4:
week = 5;
break;
case 5:
week = 6;
break;
case 6:
week = 0;
break;
default:
break;
}

if (c > week)
{
temp = (b-1)*7 + (c-week) + 1;
}
else
{
temp = b*7 + 1 - (week - c);
}

if ((day ==1 && temp > 31) || (day ==2 && temp > 28) || (day ==3 && temp > 30))
{
printf("none\n");
}
else
{
printf("%d/%d/%d\n", j, a, temp + 1);
}
}

return 0;
}
相似回答