【备战蓝桥】 算法·每日一题(详解+多解)-- day2

简介: 【备战蓝桥】 算法·每日一题(详解+多解)-- day2

【备战蓝桥】 算法·每日一题(详解+多解)-- day2


✨博主介绍

第一题

第二题

第三题

第四题

第五题

第六题

💫点击直接资料领取💫


✨博主介绍

🌊 作者主页:苏州程序大白


🌊 作者简介:🏆CSDN人工智能域优质创作者🥇,苏州市凯捷智能科技有限公司创始之一,目前合作公司富士康、歌尔等几家新能源公司


💬如果文章对你有帮助,欢迎关注、点赞、收藏


💅 有任何问题欢迎私信,看到会及时回复

💅关注苏州程序大白,分享粉丝福利


第一题


题目描述


门牌制作:


小蓝要为一条街的住户制作门牌号。 这条街一共有2020 位住户,门牌号从1 到2020 编号。 小蓝制作门牌的方法是先制作0 到9

这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017 需要依次粘贴字符1、0、1、7,即需要1 个字符0,2 个字符1,1

个字符7。 请问要制作所有的1 到2020 号门牌,总共需要多少个字符2?


#include<bits/stdc++.h>
using namespace std;
int res = 0;
void check(int n){
  while(n){
    int tmp = n % 10;
    if(tmp == 2) res ++;
    n /= 10;
  }
}
int main() {
  for(int i = 1; i <= 2020; i++){
    check(i);
  } 
  cout << res << endl;
  return 0;
}


第二题


题目描述:


既约分数:

如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。

请问,有多少个既约分数,分子和分母都是1 到2020 之间的整数(包括1和2020)?


#include<bits/stdc++.h>
using namespace std;
int main() {
  int res = 0;
  for(int i = 1; i <= 2020; i++){
    for(int j = 1; j <= 2020; j++){
      if(__gcd(i, j) == 1) res ++;
    }
  }
  cout << res << endl;
  return 0;
}


第三题


题目描述:


蛇形填数:

如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。

1 2 6 7 15 …

3 5 8 14 …

4 9 13 …

10 12 …

11…

容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?


#include<bits/stdc++.h>
using namespace std;
int main() {
  int res = 1;
  for(int i = 2; i <= 20; i++){
    res += (i-1) * 4;
  }
  cout << res;
  return 0;
}


第四题


题目描述:


跑步锻炼:

小蓝每天都锻炼身体。

正常情况下,小蓝每天跑1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑2 千米。如果同时是周一或月初,小蓝也是跑2 千米。

小蓝跑步已经坚持了很长时间,从2000 年1 月1 日周六(含)到2020 年10 月1 日周四(含)。

请问这段时间小蓝总共跑步多少千米?

这是一道结果填空的题,你只需要算出结果后提交即可。

本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


#include<bits/stdc++.h>
using namespace std;
int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool check(int n){
  int year = n / 10000;
  int month = n % 10000 / 100;
  int day = n % 100;
  if(month <= 0 || month > 12) return false;
  if(day <= 0 || months[month] < day && month != 2) return false;
  if(month == 2){
    bool run = year % 4 == 0 && year % 100 || year % 400 == 0;
    if(run + months[2] < day) return false; 
  }
  return true;
}
int main() {
  int res = 0, days = 5;
  for(int i = 20000101; i <= 20201001; i++){
    if(check(i)){
      if(days % 7 == 0 || i % 100 == 1) res += 2;
      else res++;
      days++;
    }
  }
  cout << res << endl;
  return 0;
}


第五题


题目描述:


回文日期:

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年2 月2日。因为如果将这个日期按“yyyymmdd” 的格式写成一个8 位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。

有人表示20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到2 年之后就是下一个回文日期:20211202 即2021 年12 月2 日。

也有人表示20200202 并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约100 年后就能遇到下一个ABABBABA 型的回文日期:21211212 即2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。

给定一个8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA 型的回文日期各是哪一天。


#include <bits/stdc++.h>
using namespace std;
int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool check(int n) {
  int year = n / 10000;
  int month = n % 10000 / 100;
  int day = n % 100;
  if(month <= 0 || month > 12) return false;
  if(day <= 0 || day > months[month] && month != 2) return false;
  if(month == 2) {
    int run = year % 4 == 0 && year % 100 || year % 400 == 0;
    if(day > run + months[2]) return false;
  }
  return true;
}
int main() {
  int n, c;
  cin >> c;
  while(c --) {
    cin >> n;
    int a = 0, b = 0; //a代表下一个回文日期,b代表 ABABBABA 型的回文日期
    for(int i = 1000; i < 10000; i++) {
      int u = i, v = i;
      for(int i = 0; i < 4; i++) {
        u = u * 10 + v % 10;
        v /= 10;
      }
      int day = u % 100;
      int month = u % 10000 / 100;
      if(check(u) && u > n) {
        if(a == 0) a = u;
        if(b == 0 && day == month && day / 10 != day % 10) b = u;
      }
    }
    cout << a << endl << b << endl;
  }
  return 0;
}


第六题


题目描述:


成绩统计:

小蓝给学生们组织了一场考试,卷面总分为100 分,每个学生的得分都是一个0 到100 的整数。

如果得分至少是60 分,则称为及格。如果得分至少为85 分,则称为优秀。

请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。


#include <bits/stdc++.h>
using namespace std;
int main() {
  int n = 0, m = 0, c = 0, l;
  cin >> c;
  l = c;
  while(c --){
    int tmp;
    cin >> tmp;
    if(tmp >= 60) n ++;
    if(tmp >= 85) m ++;
  }
  printf("%.0f%%\n%.0f%%", 100 * (double(n) / l), 100 * (double(m) / l)) ;
  return 0;
}


相关文章
|
算法 测试技术
【迎战蓝桥】 算法·每日一题(详解+多解)-- day9
💖1. 两个链表的第一个公共结点 💖2. 二叉树的深度 💖3. 数组中只出现一次的数字
【迎战蓝桥】 算法·每日一题(详解+多解)-- day9
|
算法
【迎战蓝桥】 算法·每日一题(详解+多解)-- day2
💖1. 斐波那契数列 💖2. 青蛙跳台阶问题 💖3. 矩形覆盖
|
算法
【迎战蓝桥】 算法·每日一题(详解+多解)-- day11
💖1. 按之字形顺序打印二叉树 💖2. 二叉搜索树的第k个节点 💖3. 二叉搜索树的第k大节点
|
算法
【迎战蓝桥】 算法·每日一题(详解+多解)-- day10
💖1. 和为S的连续正数序列 💖2. 左旋转字符串 💖3. 翻转单词序列
108 0
|
算法
【迎战蓝桥】 算法·每日一题(详解+多解)-- day3
💖1. 链表中倒数第k个结点 💖2. 反转链表(五种解题思路) 💖3. 合并两个排序的链表
|
存储 算法 搜索推荐
【迎战蓝桥】 算法·每日一题(详解+多解)-- day8
💖1. 连续子数组的最大和 💖2. 回文数索引 💖3. 把数组排成最小的数
【迎战蓝桥】 算法·每日一题(详解+多解)-- day8
|
算法
【迎战蓝桥】 算法·每日一题(详解+多解)-- day1
【迎战蓝桥】 算法·每日一题(详解+多解)-- day1
【迎战蓝桥】 算法·每日一题(详解+多解)-- day1
|
存储 算法 Java
【迎战蓝桥】 算法·每日一题(今日详解)-- day7
💖1. 二叉树中和为某一值的路径(二) 💖2. 字符串的排列 💖3. 最小的K个数
|
算法
【迎战蓝桥】 算法·每日一题(今日详解)-- day6
💖1. 包含min函数的栈 💖2. 栈的压入、弹出序列 💖3. 从上往下打印二叉树 💖4. 二叉搜索树的后序遍历序列
|
算法
【迎战蓝桥】 算法·每日一题(今日详解)-- day4
💖1. 数的子结构 💖2. 二叉树的镜像 💖3. 删除链表中重复的结点