黑色星期五能不能用蔡勒公式求?

日月三辰 2019-04-06 11:33:20
#include<stdio.h>

int main()
{
int year,month,week,j,a,b,c,y,a1,a2,a3;
scanf("%d",&year);
for(month=3;month<=14;month++)
{
if(month==13 && month==14)
year--;
c=year/100;
y=year-c*100;
a=y-2*c+12;
a1=c/4;
a2=y/4;
a3=26*(month+1)/10;
week=a1+a2+a3+a;
if(week<0){ week+=7;}
week%=7;
if(week==5)
{
if(month==13 && month==14)
{month-=12;year++;}
printf("%d-%d-13\n",year,month);
}
}

return 0;
}
当我输入19998时只有三月和十一月的13号才是星期五,但是答案还有一个二月,为什么算不出来呢?
...全文
205 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2019-04-08
  • 打赏
  • 举报
回复
你的代码有逻辑问题:
#include<stdio.h>

int main()
{
 int year,month,week,j,a,b,c,y,a1,a2,a3;
 scanf("%d",&year);
  for(month=3;month<=14;month++)
  {
   if(month==13)
       year--;
   c=year/100;
   y=year-c*100;
   a=y-2*c+12;
   a1=c/4;
   a2=y/4;
   a3=26*(month+1)/10;
   week=a1+a2+a3+a;
   if(week<0){ week+=7;}
   week%=7;
   if(week==5)
   {
 if(month==13 || month==14)
    printf("%d-%d-13\n",year + 1,month - 12);
 else
    printf("%d-%d-13\n",year,month);
   }
  }

 return 0;
}
引用 8 楼 weixin_44504818 的回复:
[quote=引用 7 楼 636f6c696e的回复:]两处 if(month==13 && month==14)都应该改成 if(month==13 || month==14) 实际上month不可能既等于13也等于14,因此你1/2月份的输出都是错的。 楼上说的“还有你这只输出了13,14也就是1,2月的情况,并没有输出3-12月的情况,再if后面再加个else if就好了” 估计是看错了,你的输出是对的。
但是我改了仍然不行啊,为什么呢?[/quote]
coo135 2019-04-08
  • 打赏
  • 举报
回复
算法对的,但是1、2月份的状况没处理好,如何改进见代码。



#include<stdio.h>

int main() {
int year,month,week,j,a,b,c,y,a1,a2,a3;
scanf("%d",&year);
for(month=3; month<=14; month++) {
if(month==13 || month==14)
year--; //是1、2月份则计算时年份-1
c=year/100;
y=year-c*100;
a=y-2*c+12;
a1=c/4;
a2=y/4;
a3=26*(month+1)/10;
week=a1+a2+a3+a;
if(week<0) {
week+=7;
}
week%=7;
if(month==13|| month==14)
year++; // 算完再加回来,恢复原状。
if(week==5) {
//正确的month用 month>12?month-12:month即可,不要直接去修改。
printf("%d-%d-13\n",year,month>12?month-12:month);
}
}
return 0;
}
日月三辰 2019-04-08
  • 打赏
  • 举报
回复
只用if不也可以输出3到12月的情况吗?
日月三辰 2019-04-08
  • 打赏
  • 举报
回复
引用 6 楼 qq_43428547的回复:
刚刚看到你的贴子,不知道黑色星期5,也不知道这个公式,所以插了下,自己写了个代码,把你的代码和我的跑结果比较了下,发现,你把&&改为||后,month不能进行自减,输出时减12就好了,还有你这只输出了13,14也就是1,2月的情况,并没有输出3-12月的情况,再if后面再加个else if就好了
改了还是不行呀,怎么回事呢?
日月三辰 2019-04-08
  • 打赏
  • 举报
回复
引用 7 楼 636f6c696e的回复:
两处 if(month==13 && month==14)都应该改成 if(month==13 || month==14) 实际上month不可能既等于13也等于14,因此你1/2月份的输出都是错的。 楼上说的“还有你这只输出了13,14也就是1,2月的情况,并没有输出3-12月的情况,再if后面再加个else if就好了” 估计是看错了,你的输出是对的。
但是我改了仍然不行啊,为什么呢?
636f6c696e 2019-04-08
  • 打赏
  • 举报
回复
两处 if(month==13 && month==14)都应该改成 if(month==13 || month==14) 实际上month不可能既等于13也等于14,因此你1/2月份的输出都是错的。 楼上说的“还有你这只输出了13,14也就是1,2月的情况,并没有输出3-12月的情况,再if后面再加个else if就好了” 估计是看错了,你的输出是对的。
dddjjj-sicnu 2019-04-08
  • 打赏
  • 举报
回复
引用 13 楼 qq_43428547 的回复:
嗯,楼下有人帮你解决了,我看了下 你是先判断week == 5,再year++的 但是year==13时,week!=5,这样year就不会++了, 年份比之前少了1哦
你可以每次for循环式都给year一个初始值,或者把week的判断和month的判断调换一下位置
日月三辰 2019-04-08
  • 打赏
  • 举报
回复
引用 13 楼 qq_43428547的回复:
嗯,楼下有人帮你解决了,我看了下 你是先判断week == 5,再year++的 但是year==13时,week!=5,这样year就不会++了, 年份比之前少了1哦
好的,谢谢,已经可以了
日月三辰 2019-04-08
  • 打赏
  • 举报
回复
引用 12 楼 636f6c696e的回复:
你的代码有逻辑问题:
#include<stdio.h>

int main()
{
 int year,month,week,j,a,b,c,y,a1,a2,a3;
 scanf("%d",&year);
  for(month=3;month<=14;month++)
  {
   if(month==13)
       year--;
   c=year/100;
   y=year-c*100;
   a=y-2*c+12;
   a1=c/4;
   a2=y/4;
   a3=26*(month+1)/10;
   week=a1+a2+a3+a;
   if(week<0){ week+=7;}
   week%=7;
   if(week==5)
   {
 if(month==13 || month==14)
    printf("%d-%d-13\n",year + 1,month - 12);
 else
    printf("%d-%d-13\n",year,month);
   }
  }

 return 0;
}
[quote=引用 8 楼 weixin_44504818 的回复:] [quote=引用 7 楼 636f6c696e的回复:]两处 if(month==13 && month==14)都应该改成 if(month==13 || month==14) 实际上month不可能既等于13也等于14,因此你1/2月份的输出都是错的。 楼上说的“还有你这只输出了13,14也就是1,2月的情况,并没有输出3-12月的情况,再if后面再加个else if就好了” 估计是看错了,你的输出是对的。
但是我改了仍然不行啊,为什么呢?[/quote][/quote] 好的,谢谢,已经可以了
dddjjj-sicnu 2019-04-08
  • 打赏
  • 举报
回复
嗯,楼下有人帮你解决了,我看了下 你是先判断week == 5,再year++的 但是year==13时,week!=5,这样year就不会++了, 年份比之前少了1哦
日月三辰 2019-04-07
  • 打赏
  • 举报
回复
引用 3 楼 focuslight的回复:
for(month=3;month<=14;month++) 你的循环是从3月开始的吧
对呀,蔡勒公式不是得把一月和二月当十三月和十四月吗?
dddjjj-sicnu 2019-04-07
  • 打赏
  • 举报
回复
刚刚看到你的贴子,不知道黑色星期5,也不知道这个公式,所以插了下,自己写了个代码,把你的代码和我的跑结果比较了下,发现,你把&&改为||后,month不能进行自减,输出时减12就好了,还有你这只输出了13,14也就是1,2月的情况,并没有输出3-12月的情况,再if后面再加个else if就好了
Isnis-fallen 2019-04-07
  • 打赏
  • 举报
回复
for(month=3;month<=14;month++) 你的循环是从3月开始的吧
日月三辰 2019-04-07
  • 打赏
  • 举报
回复
有人帮我看一下嘛?谢谢啊
日月三辰 2019-04-06
  • 打赏
  • 举报
回复
有没有大佬帮忙看看呀
日月三辰 2019-04-06
  • 打赏
  • 举报
回复
有人吗,帮忙看看好吗,谢谢大佬

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧