C语言嵌套for-loop计数不更新:统计指定日期范围内周一出现次数
问题分析
计数器i的更新逻辑不符合计数规则:
- 原代码将
i的自增放在外层年度循环中,会跨年度累计数值,没有按单个年份的5月15-24日区间单独统计周一数量 - 匹配到周一就直接将
i重置为0,无法正确统计同一年区间内的周一总数
修正后代码
#include <stdio.h> #define SIZE 1000 // 如不需要该头文件可直接删除 //#include "printVday.h" int weekday(int d, int m, int y); int main() { int m = 5, y, day, year; char dates[SIZE]; printf("Enter a year: "); scanf("%d", &y); for (year = y; year <= y + 20; year++) { int monday_cnt = 0; // 第一轮遍历:统计当年5月15-24日区间的周一总数量 for (day = 15; day <= 24; day++) { if (weekday(day, m, year) == 1) { monday_cnt++; } } int print_cnt = 0; // 第二轮遍历:按规则输出结果 for (day = 15; day <= 24; day++) { if (weekday(day, m, year) == 1) { print_cnt++; int count_val; if (monday_cnt == 1) { count_val = 1; } else { count_val = (print_cnt == 1) ? 2 : 0; } printf("\n%d /%d /%d count = %d\n", day, m, year, count_val); } } } return 0; } int weekday(int d, int m, int y) { return (d += m < 3 ? y-- : y - 2, 23 * m / 9 + d + 4 + y / 4 - y / 100 + y / 400) % 7; }
逻辑说明
- 每个年度单独统计,先计算当年5月15日至24日区间内的周一总数量
- 第二次遍历区间日期,按规则匹配输出值:
- 区间内仅1个周一,输出
count=1 - 区间内有2个周一,第一个周一输出
count=2,第二个周一输出count=0
- 区间内仅1个周一,输出
- 年度统计逻辑完全隔离,不会出现跨年度数值干扰,输出结果和预期完全一致
内容的提问来源于stack exchange,提问作者user17067764
相关产品推荐
相关产品推荐

