蓝桥杯第十一届c++大学B组详解

目录

1.字符串排序

2.门牌制作

3.即约分数

4.蛇型填数

5.跑步锻炼

6.七段码

7.成绩统计

8.回文日期

9.字串分值和

10.平面切分


1.字符串排序

 题目解析:这个题目真没搞懂。有会的大佬教我一下谢谢。

2.门牌制作

题目解析:出过超级多这类题目,就是每位检查有2.

#include <iostream>
using namespace std;

int add(int x)
{
   int sum = 0;
   while(x)
   {
      int t = x % 10;
      if(t == 2)
        sum++;
      x /= 10;
   }
   return sum;
}

int main()
{
   int Sum = 0;
   for(int i = 1; i <= 2020; i++)
   {
      Sum += add(i);
   }
   cout << Sum << endl;
   return 0;
}

3.即约分数

 题目解析:就是求公约数==1;

#include <iostream>
using namespace std;


int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

int main()
{
   int ans = 0;
   for(int i = 1; i <= 2020; i++)
   {
       for(int j = 1; j <= 2020; j++)
       {
           if(gcd(i, j) == 1)
           {
              ans++;
           }
       }
   }
   cout << ans << endl;
   return 0;
}

4.蛇型填数

 题目解析:就是找规律,

第一行第一列:1

第二行第二列:1+1*4 = 5;

第三行第三列:1 + 1*4 + 2 * 4= 13;

...

所以第二十行第二十列:

1+1*4 + 2*4 + 3 *4 + ...+ 19*4;

#include <iostream>
using namespace std;


int main()
{
  int n = 20;
  int sum = 1;
  for(int i = 0; i < 20; i++)
  {
    sum += i * 4;
  }
  cout << sum << endl;
  return 0;
}

5.跑步锻炼

题目解析:日期类问题。

#include <iostream>
using namespace std;

int ans = 0;
int Month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
    int year = 2000; int month = 1; int day = 1; int weekday = 6;
    while(1)
    {
       ans += (weekday == 1 || day == 1) + 1;
       if(year == 2020 && month == 10 && day == 1)
       {
         break;
       }

       day++;
       weekday = (weekday + 1) % 7;

       if(month == 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0))
       {
           if(day > Month[month] + 1)
           {
               day = 1;
               month += 1;
           }
       }
       else if(day > Month[month])
       {
            day = 1;
            month += 1;
       }

       if(month == 13)
       {
            month = 1;
            year += 1;
       }
    }
    cout << ans << endl;
    return 0;
}

6.七段码

 题目解析:将相邻的边全部放到矩阵当中,采用dfs深搜,将每种每一层进行遍历,方法进行记录并且加和。

#include <iostream>
using namespace std;

 int graph[7][7] = 
 {//转化成矩阵
      {1,1,0,0,0,1,0},
      {1,1,1,0,0,0,1},
      {0,1,1,1,0,0,1},
      {0,0,1,1,1,0,0},
      {0,0,0,1,1,1,1},
      {1,0,0,0,1,1,1},
      {0,1,1,0,1,1,1}
};

int f[7] = { 0 };
int dfs(int n, int i) 
{
    int sum = 1;
    for (int k = 0; k < n; k++)
    {
        if (graph[i][k] == 1 && f[k] == 0)
        {
            f[k] = 1;
            sum +=dfs(7, k);
            f[k] = 0;//回溯
        }
    }
    return sum;
}
int main()
{
    cout << dfs(7, 0) / 2;
    return 0;
}

7.成绩统计

 题目解析:简单统计

#include <iostream>
using namespace std;
int main()
{
    double a = 0;
    double b = 0;
    double c;
    cin >> c;
    int n;
    for (int i = 0; i < c; i++)
    {
        cin >> n;
        if (n >= 60)
        {
            a++;
        }
        if (n >= 85)
        {
            b++;
        }
 
    }
    int x =(a * 100.0)/c+0.5;
    int y =(b * 100.0)/c+0.5;
    cout << x << "%" << endl << y << "%";
    return 0;
}

8.回文日期

题目解析:可以先找到年份在输入年份之间,再对于年份逆置变成月份和日份,并且符合真正日历时间就是一种答案。

#include<iostream>

using namespace std;
int daymonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool check(int date)
{
    int year = date / 10000;
    int month = (date / 100) % 100;
    int day = date % 100;

    if(month < 0 || month > 12) return false;

    if(day ==0 || month != 2 && day > daymonth[month]) return false;

    if(month == 2 )
    {
        int leap = year % 100 && year % 4 == 0 || year % 400 == 0;
        if(day > daymonth[month] + leap) return false;
    }
}

int main()
{
   int date1, date2;
   cin >> date1 >> date2;
   int ans = 0;
   
   for(int i = 1000; i <= 10000; i++)
   {
        //年份范围
        int date = i, x = i;
        for(int j = 0; j < 4; j ++ )    
          date = date * 10 + x % 10, x /= 10;

        if(date1 <= date && date <= date2 && check(date))
        {
            ans++;
        }
   }

   cout << ans << endl;
   return 0;
}

9.字串分值和

题目解析: 题目意思可以用一个例子来表示:

f[a] = 1;

f[ab] = 2;

f[aba] = 1;

那么就是相同的字符就会影响贡献点。那么就要想到不把相同的字符放到一起求f[]。

axxxxaxxxxa

那么就要将再次出现的字符和前一次出现的字符之间的字符进行放到f[]求贡献点以及与长度进行相乘。

#include <iostream>
#include<cstring>
using namespace std;

int num[26];
int main()
{
   string s;
   cin >> s;
   int len = s.size();
   memset(num, -1, sizeof(num));

   long long ans = 0;
   for(int i = 0; i < len; i++)
   {
       ans += (long long)(i - num[s[i] - 'a']) * (len - i);
       num[s[i] - 'a'] = i;
   }
   cout << ans << endl;
   return 0;
}

10.平面切分

 题目解析:根据下面的图片可以分析出来规律。

(1)如果线是重合不增加面的个数;

(2)线相互平行就在原来基础增加一个面;

(3)相交(但是交点不重合)原来基础增加一个面;

(4)相交(焦点重合)增加一个面。

#include<bits/stdc++.h>
using namespace std;
double A[100005];
double B[100005];
double x[100005];
double y[100005];
int zll(int n)
{//进入该函数,寻找第n条直线与其他直线相交或平行的情况 
	int remark,num=1;//进入该函数至少加1,所以初始化为1 ,也是整体+1 
	for(int j=0;j<n;j++)
  {
					 if(A[n]==A[j]) continue;//第n条直线与前面j条平行,跳入下一次循环,因为平行只增加一个平面 
				   remark=0;	              //若是第n条直线碰到第2条甚至更多平行的直线,不再增加新的平面 
			     x[j]=(B[n]-B[j])/(A[j]-A[n]);//执行到这里只剩下了两种情况,一种是第n条直线与第j条直线相交产生了新的交点 
			     y[j]=A[n]*x[n]+B[n];         //第二种是第n条直线与第j条直线相交,却交到了第j条与其它直线相交的旧交点上 
			     for(int k=0;k<j;k++)
           {
			     	 if(x[j]==x[k]&&y[j]==y[k])
              {
			     		remark=1;//这是第2种情况,不再+1 
					 }
				 }
				 if(remark!=1)
         {
				 	num++;//不是第2种情况就是第1种情况,产生一个新交点我就再+1 
				 }
	}
	return num;
}
int main(){
	int n,mark=0,sum=1;
	cin>>n; 
	for(int i=0;i<n;i++){
		cin>>A[i]>>B[i];
		mark=0;
		for(int j=0;j<i;j++){
			if(A[i]==A[j]&&B[i]==B[j]){//遍历第i条线的前面i-1条是否重复 
				mark=1;
				break;
			}
		}
		if(mark==1)//只要找到重复的,直接跳到下一次循环 
			continue;//此时实际并没有产生新的平面 ,排除掉了唯一不增加平面的情况 
			if(i==0){
				sum=2;
			}
			else{//进入else内部每一次相加,zll()的值最少为1 
				sum=sum+zll(i);
			}
	}
		cout<<sum;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/529222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

坚持十天做完Python入门100题第一天

坚持十天做完Python入门100题第一天 第1题 变量更新第2题 变量命名规则第3题 类型错误第4题 序列索引第5题 序列切片第6题 负数切片第7题 Range函数 第1题 变量更新 解析&#xff1a;Python代码的读取和执行是由上至下的&#xff0c;变量n一开始被赋值为1&#xff0c;但被更新了…

ssm034学生请假系统+jsp

学生请假系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生请假系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…

c++中的命名空间

对于C语言中我们有时候很难将标准库中的关键字当作变量的名称&#xff0c;这就是C语言中会存在的命名冲突的问题。 但是在c中我们可以自行开辟一块命名空间出来&#xff0c;我们可以将我们所需要的变量的名称放在一块区域中&#xff0c;当我们需要使用的时候我们就通过那块命名…

ssm035基于JavaWeb的家居商城系统的设计与实现+jsp

家居商城系统 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于家居商城系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了家居商城系统&#xff0c;它彻底改…

c语言 :柔性数组与c/c++内存领域的划分

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一 柔性数组&#xff08;1&#xff09;什么是柔性数组1&#xff09;柔性数组的声明2&#xff09;柔性数组的特性 &#xff08;2&#xff09;柔性数组的使用 二 c/c内…

代码随想录算法训练营三刷 day49 | 动态规划 之121 买卖股票的最佳时机 122 买卖股票的最佳时机II

三刷day49 121. 买卖股票的最佳时机1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 题目链接 解题思路&#xff1a; 动规五部曲分析如下&…

AI技术将影响更长远,比如未来的就业形势

随着人工智能渗透到工作场所&#xff0c;人类将需要掌握新的工作技能。 AI作为新技术已经开始扰乱就业市场了。对于最新的AI人工智能技术&#xff0c;经济学家、教育工作者、监管机构、商业分析师以及相关领域专家预测&#xff0c;在不久的将来&#xff0c;人工智能一代将需要…

MySQL的基础操作(二)

目录 一.数据库约束 1.主键约束 (Primary Key) 2.唯一约束 (Unique) 3.外键约束 (Foreign Key): 4.检查约束(Check) 5.默认约束 (Default) 二.聚合查询 1.简单聚合函数 2.GROUP BY子句 3.HAVING子句 三.联合查询 1.内连接 2.左连接 3.右连接 4.子查询 5.合并查询…

Java 基于微信小程序的校园请教小程序的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

【网络捉鬼记】微信可以部分网页可以,其它网页打不开提示无法找到NDS地址

蹭网蹭得好好的&#xff0c;为啥突然这样呢&#xff1f; 发现微信可以&#xff0c;百度搜索网页可以打开但图片出不来&#xff0c;再点一个新闻进去又是上图的样子。 问AI&#xff01;却发现连质谱清言也打不开&#xff01;用自己热点问&#xff1a; 至于win10怎么更换DNS&…

弹幕功能1

今天看pure-admin的时候发现有个弹幕功能 GitHub - hellodigua/vue-danmaku: 基于 Vue 的弹幕交互组件 | A danmaku component for Vue

场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)

怎么读论文 在第一遍阅读的时候&#xff0c;只需要看题目&#xff0c;摘要和结论&#xff0c;先看题目是不是跟我的方向有关&#xff0c;看摘要是不是用到了我感兴趣的方法&#xff0c;看结论他是怎么解决摘要中提出的问题&#xff0c;或者怎么实现摘要中的方法&#xff0c;然…

NumPy进阶(二)

2. NumPy进阶(二) 2.1 Numpy数组操作 2.1.1 添加元素 numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组&#xff0c;并把原来的数组复制到新数组中 注意&#xff1a; 插入的维度要保证所有数组的长度是相同的如果没有指定轴&#xff0c;数组会被扁平处理 ndarr…

《极域多媒体教室互动管理系统软件》控制方法大全

前言及背景&#xff1a; 当我坐在电脑前&#xff0c;打开它&#xff0c;点开谷歌&#xff0c;刚刚想打开百度&#xff0c;突然闪出来了&#xff1a; 该网页已被阻止&#xff01;&#xff01;&#xff01; 正文&#xff1a; 1.极域控制原理&#xff1a; 好…

Oracle表空间满清理方案汇总分享

目录 前言思考 一、第一种增加表空间的数据文件数量达到总容量的提升 二、第二种解决方案针对system和sysaux的操作 2.1SYSTEM表空间优化 2.2sysaux表空间回收 2.2.1针对sysaux的表空间爆满还有第二套方案维护 三、第三种解决方案使用alter tablespace resize更改表空间的…

3D空间坐标到2D屏幕坐标

1、相机矩阵 2、投影矩阵 3、相平面矩阵 4、应用 漫游 案例一&#xff1a;实时修改View Matrix的三个分量&#xff0c;可以实现在三维场景中漫游。比如&#xff0c;要在场景中移动&#xff0c;可以修改视点位置 Eye&#xff1b;要拐弯了&#xff0c;修改参考点center&#xf…

SpringBoot第一个hello world项目

文章目录 前言一、Spring Boot是什么&#xff1f;二、使用步骤1. 创建项目2.书写测试 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了…

matlab学习002-函数及流程控制语句

目录 一&#xff0c;matlab编程基础 1&#xff09;matlab脚本和函数文件 ①脚本文件 ②函数文件 2&#xff09;函数的定义和调用 ①定义 ②调用 3&#xff09;程序流程控制 ①使用for求 122^2……2^622^63之和 ②使用while语句求122^2……2^622^63之和 ③使用matl…

Android设备使用DS file远程访问群晖NAS管理本地文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…

P8602 [蓝桥杯 2013 省 A] 大臣的旅费【树的直径】

P8602 [蓝桥杯 2013 省 A] 大臣的旅费 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include <algorithm> #include <vector> using namespace std; #define int long long const int N5e5100; int n; int res0; typedef pair<int,…