You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
  • 年度统计逻辑完全隔离,不会出现跨年度数值干扰,输出结果和预期完全一致

内容的提问来源于stack exchange,提问作者user17067764

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:39:04