KY18 今年的第几天?
⭐️难度:中等
⭐️知识点:模拟
📖题目:

📚题解1:自己做
cpp
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
using namespace std;
void count(int year, int month, int day) {
int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int isLeap; // 是否是闰年
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { // 闰年二月29天
dayOfMonth[2] = 29;
}
int sum = 0; // 记录第几天
for (int i = 1;i < month;i++) {
sum = sum + dayOfMonth[i];
}
sum = sum + day;
printf("%d\n", sum);
}
int main() {
int year = 0 ;
int month = 0;
int day = 0;
while (scanf("%d%d%d",&year,&month,&day) != EOF) {
count(year, month, day);
}
return 0;
}
📚题解2:利用NextDay函数
cpp
#include <stdio.h>
using namespace std;
void NextDay(int &year, int &month, int &day) {
// & 出现在定义or形参当中 表示引用的意思 出现在其他位置,表示取地址
// 存储一下 月份和天数的对应关系
int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int isLeap; // 是否是闰年
isLeap = year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
if (isLeap) {
dayOfMonth[2] = 29;
}
else {
dayOfMonth[2] = 28;
}
++day;
if (day > dayOfMonth[month]) {
day = 1;
++month;
}
if (month > 12) {
month = 1;
++year;
}
//printf("NextDay year = %d, month = %d, day = %d\n", year, month, day);
}
//int main() {
// int year = 1900;
// int month = 2;
// int day = 28;
// NextDay(year, month, day);
// printf("main year = %d, month = %d, day = %d\n", year, month, day);
// return 0;
//}
int main() {
int year, month, day;
while (scanf("%d%d%d", &year, &month, &day) != EOF) {
int next = 1; // NextDay执行的次数
int curmonth = 1;
int curday = 1;
while (1) {
if (month == curmonth && day == curday) {
break;
}
NextDay(year, curmonth, curday);
++next;
}
printf("%d\n", next);
}
return 0;
}