蓝桥杯入门刷题训练——模拟1

138 阅读2分钟

题目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;
}