开始: 2022-05-15 19:00:00

2022年5月双周赛2(初级班)

结束: 2022-05-15 21:30:00
当前: 2025-0505-3131 09:39:48  类型:OI 状态:已经结束 

C. 数字统计

#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,n,sum=0; //x下限值,n为上限值
cin>>x>>n;
for(int i=x; i<=n; i++) //从x到n判断
{
int a=0,b[10],k=i; //不能改变i的值,建立变量k;数组b用来存储k的各位数
while(k)
{
b[a]=k%10;
a++;
k/=10;
}
for(int j=0; j<a; j++)
{
if(b[j]==2) //如果存在‘2’,sum+1
{
sum++;
}
}
}
cout<<sum;
return 0;
}
/*
题解:
这题的关键是把给定范围内的每一个数的每一位都分离出来,求出这所有单独的数中2的个数统计出来
对数位分解不熟悉的同学,可参考790-数位分解
*/

D. 连续m个数的最小和

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[3010];
int sum,ans;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(i<=m)
{
sum+=a[i];
if(i==m) ans=sum;
}
else
{
sum-=a[i-m];
sum+=a[i];
if(sum<ans) ans=sum;
}
}
cout<<ans;
return 0;
}
/*
这道题可以边读入边处理。
用sum累积连续m个数的和,若当前读入的数还没有m个,直接加到sum中;
若刚好m个,在加到sum中的同时,将ans初始化为sum;
若超过m个,那么sum应该加上当前第i个读入的数,再减去第i-m个读入的数,以保证sum是连续m个数的和(第i个数,第i-1个数,第i-2个数......第i-m+1个数)。再用sum和ans比较,若比ans小,则更新答案。
最后输出ans即可。
*/