难点在于输出格式上qwq,附代码。

参考代码:

#include <stdio.h>

int main(){
 int day[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //每个月份所对应的天数
 int i,j,k,q,temp,year,month,start = 1,count = 1,flag = 1;
 
 scanf("%d %d", &year,&month);
 
 printf("---------------------\n");
 printf(" Su Mo Tu We Th Fr Sa\n");
 printf("---------------------\n");
 
 for(i = 2007; i <= year; i++){ //枚举2007-year年
  if((i%4==0&&i%100!=0) || (i%400==0)) //是不是闰年
   day[2] = 29;
  for(j = 1; j <= 12 && flag == 1; j++){ //枚举1-12月
   temp = start; //从第temp个格子开始
   for(k = temp; k <= day[j]+temp-1; k++){ //k=temp的原因:不是所有的月份都是从第一个格子开始的
    if(k%7 == 0){
     start = 1; //到达第7个格子了,那么就从头再来
     if(flag == 0)
      printf("\n");
    }
    else
     start++; //没有到达第7个格子
    if(i == year && j == month){
     for(q = 1; q <= 3+(temp-1)*3 && flag == 1 && temp < 7; q++) //3+(temp-1)*3=每行要打印的空格数量+第一行要打印号的个数*每个号所占的位置宽度(%3d)=第一行要打印的所有空格数量
      printf(" ");
     flag = 0;
     printf("%3d", count);
     count++;
    }
   }
  }
  day[2] = 28;
 }
 printf("\n---------------------\n");
 
 return 0;
}


点赞(2)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

无名选手 5年前 回复TA
厉害
5年前 回复TA
qwq,另类的实现思路