题目1链接:成绩分析
解题思路
很简单的一道模拟,题目让怎么做,我们就怎么做,给出n个成绩,求出最大值,最小值,以及平均值。这里我使用的C++的sort()函数将数组进行排序,数组第一个元素就是最小值,最后一个元素就是最大值。同时用sum变量记录总成绩,以便求出平均值。
AC代码
#include <iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int main()
{
// 请在此输入您的代码
int a[N];
int n;
float sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
sort(a,a+n);
cout<<a[n-1]<<endl<<a[0]<<endl;
float m = sum / n;
printf("%.2f\n",m);
return 0;
}
题目2链接:特殊日期
解题思路
根据题目的意思,我们需要判断1900年到9999年的每一天,是否满足所给条件:如2021年10月31日,年的各个位数之和等于(月的各个位数之和+日的各个位数之和)2+0+2+1=1+0+3+1。那我们就一天一天的去判断,即使用for循环,第一层枚举年,第二层枚举月,第三层枚举日。为了使代码简洁,直接定义一个fun函数来判断。
AC代码
#include <iostream>
using namespace std;
//求每个数各个位上的数的和
int fun(int n)
{
int sum = 0;
while(n!=0)
{
sum += (n%10);
n/=10;
}
return sum;
}
int main()
{
// 请在此输入您的代码
int cnt = 0;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//预处理每个月天数的数组
for(int year=1900;year<=9999;year++)
{
//判断是否是闰年,确定二月份有几天
if(year%4==0 && year%100!=0 || year%400==0) days[2] = 29;
else days[2] = 28;
//枚举每个月
for(int month=1;month<=12;month++)
{
//枚举每一天
for(int i=1;i<=days[month];i++)
{//判断是否符合条件
if(fun(year)==fun(month)+fun(i)) cnt++;
}
}
}
cout<<cnt;
return 0;
}