user-0 提问: 黑色星期五能不能用蔡勒公式求？

回复:
user: user-1
content: 你的代码有逻辑问题： #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]

user: user-2
content: 算法对的，但是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; }

user: user-0
content: 只用if不也可以输出3到12月的情况吗？

user: user-0
content: 引用 6 楼 qq_43428547的回复:刚刚看到你的贴子，不知道黑色星期5，也不知道这个公式，所以插了下，自己写了个代码，把你的代码和我的跑结果比较了下，发现，你把&&改为||后，month不能进行自减，输出时减12就好了，还有你这只输出了13，14也就是1，2月的情况，并没有输出3-12月的情况，再if后面再加个else if就好了 改了还是不行呀，怎么回事呢？

user: user-0
content: 引用 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就好了” 估计是看错了，你的输出是对的。 但是我改了仍然不行啊，为什么呢？

user: user-1
content: 两处   if(month==13 && month==14)都应该改成   if(month==13 || month==14) 实际上month不可能既等于13也等于14，因此你1/2月份的输出都是错的。  楼上说的“还有你这只输出了13，14也就是1，2月的情况，并没有输出3-12月的情况，再if后面再加个else if就好了” 估计是看错了，你的输出是对的。

user: user-3
content: 引用 13 楼 qq_43428547 的回复:嗯，楼下有人帮你解决了，我看了下 你是先判断week == 5，再year++的 但是year==13时，week！=5，这样year就不会++了， 年份比之前少了1哦 你可以每次for循环式都给year一个初始值，或者把week的判断和month的判断调换一下位置

user: user-0
content: 引用 13 楼 qq_43428547的回复:嗯，楼下有人帮你解决了，我看了下 你是先判断week == 5，再year++的 但是year==13时，week！=5，这样year就不会++了， 年份比之前少了1哦 好的，谢谢，已经可以了

user: user-0
content: 引用 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] 好的，谢谢，已经可以了

user: user-3
content: 嗯，楼下有人帮你解决了，我看了下 你是先判断week == 5，再year++的 但是year==13时，week！=5，这样year就不会++了， 年份比之前少了1哦

user: user-0
content: 引用 3 楼 focuslight的回复:for(month=3;month<=14;month++)   你的循环是从3月开始的吧 对呀，蔡勒公式不是得把一月和二月当十三月和十四月吗？

user: user-3
content: 刚刚看到你的贴子，不知道黑色星期5，也不知道这个公式，所以插了下，自己写了个代码，把你的代码和我的跑结果比较了下，发现，你把&&改为||后，month不能进行自减，输出时减12就好了，还有你这只输出了13，14也就是1，2月的情况，并没有输出3-12月的情况，再if后面再加个else if就好了

user: user-4
content: for(month=3;month<=14;month++)   你的循环是从3月开始的吧

user: user-0
content: 有人帮我看一下嘛？谢谢啊

user: user-0
content: 有没有大佬帮忙看看呀

user: user-0
content: 有人吗，帮忙看看好吗，谢谢大佬