Online Compiler C

#include <stdio.h> #include <math.h> int main() { int a; char ans[4][7]={"winter", "spring", "summer", "autumn"}; scanf("%d",&a); printf("%s",ans[((a+1)%12)/4]); return 0; }
这段代码根据输入的月份数字(1-12)输出对应的季节。它使用了一个巧妙的数学公式将月份映射到季节数组的索引。

- 数组 `ans` 有4个季节字符串,索引0对应冬季,1对应春季,2对应夏季,3对应秋季。
- 公式 `((a+1)%12)/4` 将月份映射到0-3的索引。但需要注意,这个公式对某些月份的处理可能不符合常见的季节划分。例如,12月、1月、2月是冬季,但公式中12月的结果可能不正确。

- 检查一下当输入12时,`(12+1)%12` 的结果是1,再除以4得到0,这表示冬季,看起来是对的。但再检查3月:`(3+1)%12=4`,4/4=1,表示春季,也正确。6月:`(6+1)%12=7`,7/4=1(整数除法),表示春季,但6月应该是夏季。这里出现了错误。

- 提示:整数除法会截断小数,导致某些月份被错误归类。考虑如何调整公式或使用不同的方法,使得每个季节对应的三个月都能正确映射到同一个索引。