问题标题: 酷町堂:2862 非周日天数

0
0
已解决
李瑞曦
李瑞曦
高级天翼
高级天翼

70分

我的代码:

#include <iostream>
#include <cmath>
using namespace std;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},i,cnt;
int ss(int y){
	if(y%400==0||y%4==0&&y%100!=0)
	    return true;
	return false;
}
int main(){
	int y,m,d;
    cin>>y>>m>>d;
    d+=1;
	while(!(y==1900&&m==1&&d==1)){
		d--;
		i++;
        if(i!=7){
            //cout<<i;
            cnt++;
        }
		if(i==8){
			i=1;
		}
		if(d==0){
            if(ss(y)==false){
                a[2]=28;
            }
            else{
                a[2]=29;
            }
			d=a[m];
			m--;
			if(m==0){
				m=12;
				y--;
			}
		}
		
	}
	cout<<cnt<<endl;
	return 0;
}

 

 

李瑞曦在2021-06-09 21:02:27追加了内容

@潘孝宇 是这样吗?0分儿啊

麻烦你再帮我看一下,谢谢

#include <iostream>
#include <cmath>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},cnt;
int ss(int y){
    if(y%400==0||y%4==0&&y%100!=0)
        return true;
    return false;
}
int main(){
    int y,m,d=0,x,z=0;
    cin>>x>>y>>z;
    for(int i=1900;i<=x-1;i++){
        if(ss(i)==true){
            m[2]=29;
        }
        for(int j=1;j<=y-1;j++){
            d+=m[j];
        }
    }
    d+=z;
    cout<<d-d/7<<endl;
    return 0;
}

 


0
已采纳
潘孝宇
潘孝宇
初级光能
初级光能

我的想法是:先看每年的天数,再看每月的天数,最后看日数。

先开个数组:

int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

存放每个月天数

接下来枚举年份:

for(i:1900~x-1){
    if(是闰年)day+=366;
    else day+=365;
}

day用来存储一共经过的天数。

之所以枚举到x-1是因为x那年并没有过完整。

然后判断x当年是否为闰年,如果是,month[2]就要变为29.

再下来从1到y-1(不枚举到y,因为y月还没有过完整),每次day+=month[月份]

最后day加上z,就是过了的天数。

最终的答案是

day-day/7

望采纳

0
我要回答