特殊日期
3.特殊日期 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/2408/learning/?first_category_id=1&page=1&second_category_id=3&tags=2023 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从1900年1月1日至9999年12月31日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,2022年11月13日满足要求,因为2+0+2+2=(1+1)+(1+3)
请提交满足条件的日期的总数量。
#include<iostream>
using namespace std;
bool check(int x)
{
if(x%4==0&&x%100!=0||x%400==0)
return true;
return false;
}
int cale(int x)
{
int sum=0;
while(x)
{
sum+=x%10;
x/=10;
}
return sum;
}
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int sum=0;
for(int i=1900;i<=9999;i++)
{
if(check(i))
{
days[2]=29;
}
else
{
days[2]=28;
}
for(int k=1;k<=12;k++)
{
for(int d=1;d<=days[k];d++)
{
if(cale(i)==(cale(k)+cale(d)))
sum++;
}
}
}
cout<<sum;
return 0;
}
大乘积
4.大乘积 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/2409/learning/?page=1&first_category_id=1&second_category_id=3&tags=2023 小蓝有30个数,分别为:99,22,51,63,72,61,20,88,40,21,63,30,11,18,99,12,93,16,7,53,64,9,28,84,34,96,52,82,51,77。
小蓝可以在这些数中取出两个序号不同的数,共有30 x 29/2= 435种取法。
请问这435种取法中,有多少种取法取出的两个数的乘积大于等于2022。
#include<iostream>
using namespace std;
int a[]={99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 };
int main()
{
int sum=0;
for(int i=0;i<30;i++)
{
for(int j=i+1;j<30;j++)
{
if(a[i]*a[j]>=2022)
sum++;
}
}
cout<<sum;
return 0;
}
最大连通--(**不太熟悉**)
5.最大连通 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/2410/learning/?page=1&first_category_id=1&second_category_id=3&tags=2023 小蓝有一个30行60列的数字矩阵,矩阵中的每个数都是0或1。
#include<iostream>
using namespace std;
const int N = 1e2 + 10;
char a[N][N];
bool vis[N][N];
int n, m, mx, cnt;
int dx[] = { 0,0,1,-1 }, dy[] = { 1,-1,0,0 };
void dfs(int x, int y) {
for (int i = 0; i < 4; i++) {
int bx = x + dx[i], by = y + dy[i];
if (bx<1 || bx>n || by<1 || by>m) continue;
if (!vis[bx][by] && a[bx][by] == '1') {
vis[bx][by] = 1;
cnt++;
dfs(bx, by);
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (!vis[i][j] && a[i][j] == '1') {
cnt = 1;
vis[i][j] = 1;
dfs(i, j);
mx = max(mx, cnt);
}
}
}
cout << mx << endl;
return 0;
}