蓝桥杯模拟、思维

2023-11-20

本文是根据博主安然无虞的文章进行我的思维训练和练习,下面是我的练习代码和思路。

1.换酒问题

#include<stdio.h>
int main()
{
	int numExchange,numBottles;
	int k;
	scanf("%d %d",&numBottles,&numExchange);
	k=numBottles;
	
	while(k/numExchange>=1)
	{
		k=k/numExchange;
		numBottles+=k; 
	}

	printf("%d",numBottles);
	
	return 0;
 } 

思路:

这里设置三个变量:numExchange——需要空瓶数,numBottles——一共的酒数,k——空瓶;一开始,让k=numBottles;然后k/numExchange-这是第二次的酒瓶,在加到numBottles上,对k/numExchange进行循环即可

2. 按奇偶排序数组

#include <stdio.h>
int main()
{
	int num[100],n,target[100]={0},i=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&num[i]);
	
	for(int j=0;j<n;j++)
	{
		if(num[j]%2!=0)
			target[i++]=num[j];
	}
	
	for(int j=0;j<n;j++)
	{
		if(num[j]%2==0)
			target[i++]=num[j];	
	} 
	
	for(int i=0;i<n;i++)
		printf("%d ",target[i]);
	
	return 0;
}

思路:

这里我设置了两个数组,一个目标数组,一个结果数组,将每次排列的结果放到结果数组里,这样原数组的值就不会被覆盖,先对所有奇数排列,在对所有偶数排列就能得到结果。

3.害死人不偿命的(3n+1)猜想

#include <stdio.h>
int fun(int n)
{
	static int k=0;
	if(n%2==0)
	{
		n=n/2;
		k++;
		return fun(n); 
	}
			
	else if(n%2!=0&&n!=1)
	{
		n=(3*n+1)/2;
		k++;
		return fun(n); 
	}
	
	else if(n==1)
		return k;
		
} 
int main()
{
	int n,k;
	scanf("%d",&n);
	k=fun(n);
	printf("%d",k);
	
}

思路;

这里我采用了递归的方式来解题,将n传递进去,进行变换,当n==1时即为出口,注意fun里面的k要设为static,不然每次进行递归k都会初始化为0

4.挖掘机技术哪家强

#include<stdio.h>
 
#define MAXN 100010
int school[MAXN] = { 0 };//记录每个学校的总分
 
int main()
{
	int n = 0;
	int schID = 0;//学校编号
	int score = 0;//分数
	scanf("%d", &n);//参赛人数
	for (int i = 0; i < n; i++)//读入每一位参赛人员信息
	{
		scanf("%d %d", &schID, &score);
		school[schID] += score;//学校schID的总分增加score
	}
	int k = 0;//用于记录最高总分的学校编号
	int max = -1;//用于记录最高总分
	for (int i = 1; i <= n; i++)//由于学校是从1开始连续编号的,所以范围是1~N,其中包括N
	{
		if (school[i] > max)
		{
			max = school[i];
			k = i;
		}
	}
	printf("%d %d\n", k, max);
	return 0;
}

思路:

这里我刚开始的想法是定义一个数组,进行循环,当编号相同就相加,但是实现过程太麻烦了。

这题博主的做法我学习到了,将编号作为数组的下标,这样输入一个相同的编号就能直接加到数组里面。然后在使用打擂台的方式找到最高的分数和学校,实现方法简单,方法非常好。

5.找X

#include <stdio.h>
int main()
{
	int n,x;
	int num[200]; 
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&num[i]);
	scanf("%d",&x);
	
	for(int i=0;i<n;i++)
	{
		if(x==num[i])
		{
			printf("%d",i);
			break;
		}
			
	}
 } 

思路:

这就是个很简单的输入,遍历之后输出就可以了。

6.图形输出

#include <stdio.h>
int main()
{
	int n;
	int i=0,j=0,k=0;
	char c,s[21][21];
	scanf("%d %c",&n,&c);
	
	if(n%2==0)
		k=n/2;
	else 
		k=n/2+1;
	
	for(i=0;i<k;i++)
	{
		for(j=0;j<n;j++)
		{
			s[i][j]=c;
			if(i==0||i==k-1||j==0||j==n-1)
				printf("%c",s[i][j]);
			else
				 printf(" ",s[i][j]);
		}
		putchar('\n'); 
	}
	return 0;
}

思路:

这种图行输出都是要看规律的,i——行,j——列,看每一行和每一列有什么规律,这里第一行最后一行,第一列最后一列都是字符,按照这个规律输出,其他行和列输出空格即可

7. 日期差值

#include<stdio.h>
//#include<stdbool.h>
//平年和闰年每个月的天数
//之所以将一维写成13,是因为保证二维数组的下标与我们生活中的月份相对应,方便处理
int month[13][2] = { {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31} };
 
bool isLeap(int year)
{
	return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
 
int main()
{
	int time1, y1, m1, d1;
	int time2, y2, m2, d2;
	scanf("%d %d", &time1, &time2);
	if (time1 > time2)//设定time1早于time2,也就是说数字也它小,否则交换它们的值
	{
		int temp = time1;
		time1 = time2;
		time2 = temp;
	}
	y1 = time1 / 10000, m1 = time1 % 10000 / 100, d1 = time1 % 100;
	y2 = time2 / 10000, m2 = time2 % 10000 / 100, d2 = time2 % 100;
	int ans = 1;//记录结果,之所以初始值为1,为了满足“当两个日期是连续的,规定它们之间的天数是2天”这个条件
	//第一个日期没有达到第二个日期时进行循环
	//即!((y1 == y2)&&(m1 == m2)&&(d1 == d2))
	while (y1 < y2 || m1 < m2 || d1 < d2)
	{
		d1++;//天数加1
		if (d1 == month[m1][isLeap(y1)] + 1)//满当月天数
		{
			m1++;//日期变成下个月的1号
			d1 = 1;
		}
		if (m1 == 13)//月份满12个月
		{
			y1++;//日期变成下一年的1月
			m1 = 1;
		}
		ans++;//累计
	}
	printf("%d\n", ans);//输出结果
}

思路:

这题我写的时候没有考虑这么周全,后面看博主的代码认真理解,将思路做法记录。

1.定义一个二维数组,一维13对应了一年的十二天,二维的分别代表平年的闰年;第一维记录平年的天数,第二年记录闰年的天数(这里的主要差别是2月份的天数)。
2.将年份进行判断是平年还是闰年,得到的结果作为数组的二维下标。
3.将输入的数值进行拆分为年,月,日。
4.将ans设置为1,然后对时间短的年,月,日进行递加,直至和另一个相等,即可求得时间差。

8.D进制的A+B

#include <stdio.h>
#include <math.h>
int main()
{
	int a,b,c=0,d,k,n=0;
	int num[10];
	scanf("%d %d %d",&a,&b,&d);
	c=a+b;
	
	while(c/d>=0)
	{
		num[n]=c%d;
		c=c/d;
		if(c==0)
			break;
		n++;
		
	}
	
	for(n;n>=0;n--)
		printf("%d",num[n]);
	
	
	return 0;
 } 

思路:

在这里插入图片描述

9.回文串

#include <stdio.h>
#include <string.h>
int main()
{
	int k;
	char str[255];
	scanf("%s",&str);
	k=strlen(str);
	for(int i=0;i<=k/2;i++)
	{
		if(str[i]!=str[k-i-1])
		{
			printf("NO\n");
			break;
		}
			
		else 
			k=1;
	}
		if(k==1)
			printf("YES\n");
	
	return 0;
}

思路:

遍历循环,一但发现不对称就输出NO,跳出循环,如果是回文在输出YES

10.说反话

#include<stdio.h>

int main()
{
	int num = 0;
	char ans[90][90] = { 0 };
	while (scanf("%s", ans[num]) != EOF)//想想为什么不要&
		num++;
		
	for (int i = num - 1; i >= 0; i--)//倒着输出单词
	{
		printf("%s", ans[i]);
		if (i > 0)//注意这个条件
			printf(" ");
			
	}
	return 0;
}

思路:

这题我刚开始只是将整个倒叙输出,结果发现它只是将单词单词从最后一个到第一个输出而已,这边结合博主代码进行了思考:
定义一个二维数组,,第一维是单词的个数,由于scanf输入遇到空格就会停止,这样每次输入就存到每一维度中,每一个一维数组又是个字符串(也就是单词),这样直接倒叙输出每一个一维数组里面的单词就可以实现了

while (scanf("%s", ans[num]) != EOF)
	num++;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯模拟、思维 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • 软件测试题目

    一 判断题 每题2分 20 1 软件测试就是为了验证软件功能实现的是否正确 是否完成既定目标的活动 所以软件测试在软件工程的后期才开始具体的工作 初级 2 发现错误多的模块 残留在模块中的错误也多 初级 3 测试人员在测试过程中发现一处问题
  • Linux CentOS 7.5安装JDK1.8

    CentOS 7 5安装JDK1 8 Linux系统版本 CentOS 7 5 64位 下载JDK1 8 JDK 1 8官方下载地址 https www oracle com technetwork java javase download
  • tomcat 将详细日志写入mysql数据库

    http tomcat apache org tomcat 6 0 doc api org apache catalina valves JDBCAccessLogValve html conf server xml
  • 基础教学丨UiBot主界面、可视化、源代码视图操作

    基础教学丨UiBot主界面 可视化 源代码视图操作 今天主要讲解UiBot软件主界面 可视化视图 源代码视图的相关操作 目录 1 软件主界面操作 2 可视化视图操作 3 源代码视图操作 1 软件主界面操作 UiBot主界面布局如下 1 菜单
  • 【Java必修课】判断String是否包含子串的四种方法及性能对比

    1 简介 判断一个字符串是否包含某个特定子串是常见的场景 比如判断一篇文章是否包含敏感词汇 判断日志是否有ERROR信息等 本文将介绍四种方法并进行性能测试 2 四种方法 2 1 JDK原生方法String indexOf 在String的
  • QT画扇形和椭圆

    void MainWindow paintEvent QPaintEvent QPainter painter this painter setRenderHint QPainter Antialiasing true int radius
  • DTC status 为0x23的原因分析

    正常情况下dtc状态不可能出现0x23 当出现0x23可能是达芬奇中如下配置所致 1 PendingDtcProcessing设置为storeonly 此设置会导致没有分配快照空间的dtc无法set pending位 而且被displace
  • Python中的def函数

    概念 Python中的def语句用于定义一个函数 函数是一个代码块 它可以被重复调用 并且可以接收输入参数和返回值 在Python中 函数是由def关键字 函数名和圆括号内的参数列表组成的 场景 以下是几个函数使用场景的示例 阶乘计算 在计
  • Syntax Error: Error: Node Sass does not yet support your current environment...报错解决

    报错 Syntax Error Error Node Sass does not yet support your current environment Windows 64 bit with Unsupported runtime 93
  • Lambda表达式、std::function、和std::bind函数

    Lambda表达式 std function 和std bind函数 Lambda表达式 capture parameters mutable exception gt return type statement 1 capture 捕获外
  • Hook DirectInput->CreateDevice->GetDeviceData解决方案

    已解决 来人散分了 Hook DirectInput gt CreateDevice gt GetDeviceData 在一款使用DirectInput的3D游戏里面 通过Hook DirectInput8Create函数 CreateDe
  • 制作属于自己的个人博客-超详细教程

    SpringBoot个人博客 一 博客效果预览 博客首页预览 博客详情预览 博客评论区预览 博客底部栏预览 关于页面预览 二 博客效果在线预览 http blog ShaoxiongDu top 三 项目技术 后端SpringBoot框架
  • 基于神经网络实现数据自回归多变量预测及MATLAB实现代码

    基于神经网络实现数据自回归多变量预测及MATLAB实现代码 随着科技的不断发展 各种数据都被广泛应用到生产 生活中 而数据预测更是数据分析中重要的一环 在多变量预测领域 神经网络已经逐渐成为研究的热点之一 本文将介绍如何使用NARX NN实
  • 什么是高阶成分(HOC)?解释 React 中 render() 的目的?

    高阶成分 HOC 是一种基于React的组合特性而形成的设计模式 HOC是自定义组件 在其中包裹了另一个组件 他们可以接受任何动态提供的子组件 但不会修改或复制其输入组件中的任何行为 您可以说HOC是 纯 组件1 HOC通过对组件逻辑的重用
  • 目标检测和分类的评价指标

    准确率 Accuracy 混淆矩阵 Confusion Matrix 精确率 Precision 召回率 Recall 平均正确率 AP mean Average Precision mAP 交除并 IoU ROC AUC 非极大值抑制 N
  • 大数据工程师的日常工作是什么?要掌握哪些核心技术?

    很多人都听过大数据工程师 但却很少人知道他们是做什么的 下面就带大家一起来了解一下大数据工程师的日常 如果你对大数据感兴趣 下面的内容你一定要看看 大数据工程师是做什么的 分析历史 预测未来 优化选择 这是大数据工程师在 玩数据 时最重要的
  • npm run build源码是在哪里呢?

    npm run build 指令会执行 package json 中 scripts 字段的 build 脚本 这个脚本的代码可以在 package json 文件中的 scripts 字段内找到 例如 如果 package json 中的
  • gridlayout布局java_java Swing布局管理之GridLayout布局

    标签 GridLayout 类是一个布局处理器 它以矩形网格形式对容器的组件进行布置 容器被分成大小相等的矩形 一个矩形中放置一个组件 GridLayout网格布局特点 容器的空间划分成M N列的网格区域 每个区域只能放置一个组件 使容器中
  • JavaEE - 正则表达式、日期时间类、Math、Random、System、Runtime、大数值运算类

    一 正则表达式 用来描述或者匹配一系列符合某个语句规则的字符串 正则表达式定义了字符串的模式 可以用来搜索 编辑或处理文本 正则表达式是由普通字符 例如字符 a 到 z 以及特殊字符 称为 元字符 组成的文字模式 模式描述在搜索文本时要匹配
  • 蓝桥杯模拟、思维

    本文是根据博主安然无虞的文章进行我的思维训练和练习 下面是我的练习代码和思路 1 换酒问题 include