(蓝桥杯)c/c++判断数组中是否含有另一个数组,蔡基姆拉尔森公式,判断星期几

判断数组中是否含有另一个数组
示例
输入asd asdas d
asd
输出2

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
    char s1[1005];    //第一个数组
    char s2[1005];    //第二个数组
int main() {
    fgets(s1,1004,stdin);   //留一位给\0?
    fgets(s2,1004,stdin);
    int len1 = strlen(s1)-1; //数组里会把回车也当作元素储存,所以-1
    int len2 = strlen(s2)-1;
    int c = 0;
    for (int i = 0; i < len1-len2+1; i++) { //len1-len2+1 如果第二个数组的长度是3,那么数组1判断到还剩下2个元素的时候就可以停止了
        bool key = true; 
        for (int j = 0; j < len2; j++) {  
            if (s2[j]!=s1[j+i]){  //j+i是因为要从数组1的第i位开始判断,顺便每次+1
                key = false;
                break;
            }
        }
        if (key == true){
            c++;
        }
    }
    cout <<c;
}

主要就是要注意如何挨着判断

判断闰年:
1.年份非整且能被4整除
2.年份能被400整除

if(y%400==0||(y%100!=0&&y%4==0)){
	cout << "闰年";
}

判断星期几
蔡基姆拉尔森公式
设星期为w,年份为y,月份为m,日期为d
w=(d+2m+3(m+1)/5+y+y/4-y/100+y/400)%7
注意,每年的1,2月份要当做上一年的13,14月份来算,且均为整除

如果是按照正常的算法来计算周几,取1年1月1日为周一

#include <iostream>
using namespace std;
bool runYear(int y){
    if ((y%100!=0&&y%4==0)||y%400==0){
        return true;
    } else
        return false;
}
int thirty_oneDay(int m){
    if (m==1||m==3||m==5||m==7||m==8||m==10||m==12){
        return 1;
    } else if (m==4||m==6||m==9||m==11){
        return 2;
    } else{
        return 3;
    }
}
int whatday(int y,int m,int d){
    int num = 0;
    for (int i = 1; i < y; i++) {
        if (runYear(i)){
            num +=366%7;
            num %=7;
        } else{
            num +=365%7;
            num %=7;
        }
    }
    for (int i = 1; i < m; i++) {
        if (thirty_oneDay(i)==1){
            num+=31%7;
            num %=7;
        } else if(thirty_oneDay(i)==2){
            num +=30%7;
            num %=7;
        } else{
            if (runYear(y)){
                num +=29%7;
                num %=7;
            } else{
                num +=28%7;
                num %=7;
            }
        }
    }
    num +=num%7;
    num %=7;
    return num;
}
    int main(){
    int y,m,d=0;
    cin >> y >> m >> d;
        cout << whatday(y,m,d);
    }

需要注意的就是
num +=x%7;
num %=7;
这两个操作,一个是用时间取余7,就是要过了一年/一月的1号是周几,第二个就是把num变成周几,防止加上上一个周几后大于7。
很麻烦
能记住公式就记住公式,代码如下:

int main(){
    int y,m,d=0;
    cin >> y >> m >> d;
        if (d%7==1||d%7==2){
            m+=12;
            y--;
        }
        cout << (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值