问题描述
试题编号: 201509-2
试题名称: 日期计算
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
给定一个年份y和一个整数d,问这一年的第d天是几月几日?
注意闰年的2月有29天。满足下面条件之一的是闰年:
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍。
输入格式
输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。
输入的第二行包含一个整数d,d在1至365之间。
输出格式
输出两行,每行一个整数,分别表示答案的月份和日期。
样例输入
2015
80
样例输出
3
21
试题编号: 201509-2
试题名称: 日期计算
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
给定一个年份y和一个整数d,问这一年的第d天是几月几日?
注意闰年的2月有29天。满足下面条件之一的是闰年:
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍。
输入格式
输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。
输入的第二行包含一个整数d,d在1至365之间。
输出格式
输出两行,每行一个整数,分别表示答案的月份和日期。
样例输入
2015
80
样例输出
3
21
样例输入
2000
40
样例输出
2
9
/*CCF 201509-2 日期计算 */
#include<iostream>
using namespace std;
int a[12];
int main()
{
int y,d;
cin>>y>>d;
a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31;
a[4]=a[6]=a[9]=a[11]=30;
if(y%4==0&&y%100!=0||y%400==0)
a[2]=29;
else a[2]=28;
int month,day;
int sum=a[1];
if(d<=sum) //如果天数小于第一个月的天数,则就是一月份的第d天
{
month=1;
day=d;
}
else
{
for(int i=2;i<=12;i++) //天数大于第一个月的天数,则后面每个月天数累加,同d比较
{
sum+=a[i];
if(d<=sum)
{
month=i;
day=d-sum+a[i];
break; //要记得break,刚开始粗心忘了break了
}
}
}
cout<<month<<endl;
cout<<day<<endl;
}
每次做的思路都不一样,哈哈,都是用最简单的方法,无奈菜鸟一枚,先这样吧
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int y, dy;
int month, day;
int a = 31, b = 30, c = 29, d = 28;
int run_y[12] = { a,a + c,2 * a + c,2 * a + b + c,3 * a + b + c,
3 * a + 2 * b + c,4 * a + 2 * b + c,5 * a + 2 * b + c,
5 * a + 3 * b + c ,6 * a + 3 * b + c };
int normal_y[12] = { a,a + d,2 * a + d,2 * a + b + d,3 * a + b + d,
3 * a + 2 * b + d,4 * a + 2 * b + d,5 * a + 2 * b + d,
5 * a + 3 * b + d ,6 * a + 3 * b + d };
void normal() {
for (int i = 0; i < 12; i++) {
if (dy <= normal_y[i]) {
month = i+1;
if (i == 0)
day = dy;
else {
day = dy - normal_y[i - 1];
}
break;
}
}
}
void run() {
for (int i = 0; i < 12; i++) {
if (dy <= run_y[i]) {
month = i+1;
if (i == 0)
day = dy;
else {
day = dy - run_y[i - 1];
}
break;
}
}
}
int main() {
cin >> y >> dy;
int flag;
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
flag = 0; //闰年
else
flag = 1; //普通
if (flag == 0) {
run();
}
if (flag == 1) {
normal();
}
cout << month << endl;
cout << day << endl;
return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int y,d;
cin>>y>>d;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||(y%400==0))
a[1]=29;
int sum=0;
int day,month;
for(int i=0;i<12;i++){
sum+=a[i];
if(sum>=d&&i==0){
day=d;
month=i+1;
break;
}
else if(sum>=d&&i!=0){
day=d-(sum-a[i]);
month=i+1;
break;
}
}
cout<<month<<endl;
cout<<day<<endl;
return 0;
}