中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第二套(完善程序题)

CCF认证CSP-J入门组模拟测试题第二套

三、完善程序题

第一题 菲波拉契数列

菲波拉契数列为1,1,2,3,5,8,13,21,…,其元素产生的规则是前两个数为1,从第三个数开始每个数等于它前面两个数之和。已知任意一个正整数可以表示为若干个互不相同的菲波拉契数之和。例如:36=21+13+2。

下面的程序是由键盘输人一个正整数n,输出组成n的互不相同的菲波拉契数。算法说明:

(1)寻找小于等于n的最大菲波拉契数a,并以a作为组成n的一个数
(2)若n≠a,则以n-a作为n的新值,重复步骤(1)。若a=n,则结束。

#include<iostream>
#include<cstdio>
using namespace std;
int n;
bool first;
int find(int n)
{
	int a,b,c;
	a=l;b=l;
	do
	{
		c=a+b;
		__①__
	}while (b<n);
	if(__②__)
		return b;
	else
		__③__
}
void p(int n)
{
	int a;
	a=find(n);
	if(first)
	{
		printf("%4d",a);
		first=false;
	}
	else
		(__④__)
	if(a<n) (__⑤__);
}
int main()
{
	cin>>n;
	first=true;
	printf("%5d=",n);
	p(n);
	cout<<endl;
	return 0;
}

程序分析:此程序是一个求解斐波那契数列的程序,程序的大致流程如下:

  1. 首先定义了一个整型变量n,表示要求解的斐波那契数列的项数。
  2. 定义了一个函数find,用来找到小于等于n的最大斐波那契数。起始时,定义三个变量a、b、c,a和b都初始化为1。然后进入一个循环,在循环中计算c=a+b,然后更新a和b的值,将b赋值给a,c赋值给b。直到b的值大于等于n,循环终止。最后判断b是否等于n,如果等于n,则返回b,否则返回a。
  3. 定义了一个递归函数p,用来打印出所有的斐波那契数。首先调用find函数找到小于等于n的最大斐波那契数,并将其赋值给变量a。如果是第一个斐波那契数,将a打印出来,并将first标记为false。如果不是第一个斐波那契数,将"+"和a打印出来。然后判断a是否小于n,如果是,则递归调用p函数,将n-a作为参数传入。
  4. 程序的主函数中,读入n的值。
  5. 调用函数p,并将n作为参数传入。
  6. 打印出结果。

单选题

①处应该填

A. a=c;b=a;
B. a=b;b=c;
C. a==c;b==a;
D. a==b;b==c;

答案:B

答案分析:此处根据程序分析应该是答案B

②处应该填

A. b==n
B. b<n
C. a==n
D. a<n

答案:A        

答案分析:此处根据程序分析来是答案A

③处应该填

A. return c
B. return b
C. return a+b
D. return a

答案:D

答案分析:此处根据程序分析来是答案D

④处应该填

A. printf("%4d",a)
B. printf("+%4d",a)
C. printf("%4d",b)
D. printf("+%4d",b)

答案:B

答案分析:此处根据程序分析来是答案B,不是第一个数要加上加号

⑤处应该填

A. p(a)
B. p(b)
C. p(n-a)
D. p(n-b)

答案:C

答案分析:此处根据程序分析来是答案C

第二题 高速公路费用

现在政府计划在某个区域的城市之间建立高速公路,以使得其中任意两个城市之间都有直接或间接的高速公路相连。费用为每千米为一个单位价格,求最小费用。

输人:n(n<=100,表示城市数目)。接下来n行,每行两个数 xi,yi,表示第i个城市的坐标。(单位:千米)。输出:最小费用(保留2位小数)。

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=101;
struct tcity
{
	float x,y;
};
tcity c[maxn];
float d[maxn][maxn],a,minf;
int p[maxn],n,i,j,k;
int main()
{
	cin>>n;
	for(i=1;i<=n;i++)
		cin>>c[i].x>>c[i].y;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			d[i][j]=(__①__)
	p[1]=0;
	for(i=2;i<=n;i++)(__②__)
	for(i=1;i<=n-1;i++)
	{
		minf=1E10;
		for(j=1;j<=n;j++)
		{
			if(__③__)
			{
				minf=d[p[j]][j];
				(__④__)
			}
		}
		a=a+d[p[k]][k];
		p[k]=0;
		for(j=1;j<=n;j++)
			if(__⑤__) p[j]=k;
	}
	printf("%0.2f",a);
	return 0;
}

程序分析:此程序是一个求解旅行商问题(Traveling Salesman Problem,简称TSP)的算法。

  • 首先,定义了一个结构体tcity,表示城市的坐标信息。然后定义了一个二维数组d来存储城市之间的距离。
  • 接下来,通过输入获取城市个数n,并依次输入每个城市的坐标。
  • 然后,使用嵌套循环计算每两个城市之间的距离,并存储到二维数组d中。
  • 接下来,初始化了一个一维数组p,表示城市的访问顺序,初始时将第一个城市设置为已访问,并将其余城市设置为未访问。。
  • 接下来,进行n-1次迭代的贪心选择,每次选择距离最短的未访问城市,更新访问顺序和总距离。
  • 最后,输出最小总距离a。

单选题

①处应该填

A. sqrt((c[i].x-c[i]·y)*(c[¡].x-c[i].y)+(c[j].x-c[j].y)*(c[j].x-c[j].y));
B. sqrt((c[i].x-c[j].x)*(c[j].x-c[i].x)+(c[i].y-c[j].y)*(c[j]·y-c[i].y));
C. sqrt((c[i].x-c[j].x)*(c[i].x-c[j].x)+(c[i],y-c[j].y)*(c[i].y-c[j].y));
D. sqrt((c[i].x-c[i].y)*(c[j].x-c[j].y)+(c[i].x-c[i].y)*(c[j].x-c[j].y));

答案:C

答案分析:此处要填的是两点之间的直线距离如何计算,答案C

②处应该填

A. p[i]=1;
B. p[i]=0;
C. p[n-i]=0;
D. p[n-i]=1;

答案:D

答案分析:此处p[i]可以理解为第i点到起点1的最短距离

③处应该填

A. p[j]==0 && d[p[j]][j]<minf
B. p[j]!=0 && d[p[j]][j]<minf
C. p[j]==0 || d[p[j]][j]<minf
D. p[j]!=0 || d[p[j]][j]<minf

答案:B

答案分析:此处是查找没有加入最小费用几何的点到最小费用集合里点的距离最小值的点

④处应该填

A. k=minf
B. k=0
C. k=i
D. k=j

答案:D

答案分析:此处是记录当前最小点位

⑤处应该填

A. d[p[j]][j]>d[k][j]
B. d[p[j]][j]<d[k][j]
C. d[p[i]][j]>d[k][j]
D. d[p[i]][j]<d[k][j]

答案:D

答案分析:此处是找到集合外的点与刚加入的点是否有更优的值,如果有更新最优点位

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

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

相关文章

图像处理之《寻找和隐藏:通过深度强化学习的对抗隐写术》论文阅读

一、文章摘要 图像隐写术的目的是将一个完整大小的图像(称为秘密)隐藏到另一个图像(称为封面)中。以往的图像隐写算法只能在一个封面中隐藏一个秘密。在这篇论文中&#xff0c;我们提出了一个自适应局部图像隐写(AdaSteg)系统&#xff0c;允许缩放和位置自适应图像隐写。该系统…

2024.2.14

1.请编程实现二维数组的杨慧三角 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) { int n,i,j;printf("please enter n:");scanf("%d",&n);int arr[n][n];for(i0;i<n;i){for(j0;j<i;j){if(j0 || ij…

【无标题】Matlab 之axes函数——创建笛卡尔坐标区

**基本用法&#xff1a;**axes 在当前图窗中创建默认的笛卡尔坐标区&#xff0c;并将其设置为当前坐标区。 应用场景1&#xff1a;在图窗中放置两个 Axes 对象&#xff0c;并为每个对象添加一个绘图。 要求1&#xff1a;指定第一个 Axes 对象的位置&#xff0c;使其左下角位于…

【AIGC】Stable Diffusion的ControlNet插件

ControlNet 介绍 ControlNet 插件是 Stable Diffusion 中的一个重要组件&#xff0c;用于提供对模型的控制和调整。以下是 ControlNet 插件的主要特点和功能&#xff1a; 模型控制&#xff1a; ControlNet 允许用户对 Stable Diffusion 中的模型进行精细的控制和调整。用户可以…

单片机学习笔记---LCD1602功能函数代码

目录 LCD1602.c 模拟写指令的时序 模拟写数据的时序 初始化 显示字符 显示字符串 显示数字 显示有符号的数字 显示16进制数字 显示二进制数 LCD1602.h main.c 上一篇讲了LCD1602的工作原理&#xff0c;这一节开始代码演示&#xff01; 新创建工程&#xff1a;LCD1…

Linux内核-时间子系统(时钟中断)专题汇总

文章目录 概要一、专题汇总1.1、优秀系列博文1.2、时间子系统1.3、高精度定时器hrtimer1.4、RTC硬件芯片驱动 概要 中断机制是计算机系统的重要组成部分&#xff0c;在Linux中也不例外&#xff0c;中断按照来源分为硬中断和软中断&#xff0c;而硬中断根据硬件范围分为外中断和…

MySQL数据库基础(一):数据库概述

文章目录 数据库概述 一、数据库介绍 二、数据库分类 1、关系型数据库 2、非关系型数据库NoSQL 三、常见数据库介绍 1、关系型数据库 2、非关系型数据库 数据库概述 一、数据库介绍 数据库就是存储数据的仓库&#xff0c;其本质是一个文件系统&#xff0c;按照特定的…

AI算法参数个数本身优化空间

一、背景 AI算法的参数数量并非越多越好&#xff0c;也不是越少越好。参数的数量与模型的复杂度密切相关&#xff1a; 1. 参数多&#xff08;高复杂度模型&#xff09;&#xff1a; - 优点&#xff1a;模型具有更强的表达能力和拟合能力&#xff0c;对于复杂的、非线性的数据分…

Backtrader 文档学习- Plotting -Plotting on the same axis

Backtrader 文档学习- Plotting -Plotting on the same axis 1.概述 在同一轴上绘图&#xff0c;绘图是在同一空间上绘制原始数据和稍微(随机)修改的数据&#xff0c;但不是在同一轴上。 核心代码&#xff0c;data数据正负50点。 # The filter which changes the close pri…

PR:视频编辑播放速度技巧

想要视频片段加速或者减速&#xff0c;可以在片段上右击&#xff0c;选择“速度/持续时间...” 速度&#xff1a;可以更改百分比&#xff0c;如改成200%就是加速一倍&#xff0c;改成50%就是减速一倍。 注&#xff1a;如果源视频是正常速度录制的&#xff0c;比如每秒25帧&…

npm使用国内淘宝镜像(最新地址)

目录 前言 一、命令配置 二、使用cnpm安装 三、常见包地址 四、总结 往期回顾 前言 我们前端程序员在使用国外的镜像源速度很慢并且容易下载失败&#xff0c;有时候需要尝试多次才有可能下载成功&#xff0c;很麻烦&#xff0c;但是可以切换为国内镜像源&#xff0c;下…

Docker 在window 2024版笔记 下载 安装 操作 配置

---Docker 前言--- Docker windows版官方版是一款专业开源的应用容器引擎&#xff0c;可以加快用户构建、共享和运行现代应用程序的速度&#xff0c;支持运行Linux和Windows Docker容器。 Docker 在容器的基础上&#xff0c;进行了进一步的封装&#xff0c;从文件系统、网络互…

嵌入式中I2C 相关的硬件问题汇总及死锁解决办法

本文主要介绍如何解决I2C设备硬件设计上的各种问题&#xff0c;希望对大家有所帮助&#xff01; 关于I2C协议详细的讲解&#xff0c;可以参考之前的推文&#xff1a;全面解析 I2C 通信协议 一般情况下&#xff0c; i2c 设备焊接没什么问题&#xff0c;按照设备手册一步步来&a…

初识Qt | 从安装到编写Hello World程序

文章目录 1.前端开发简单分类2.Qt的简单介绍3.Qt的安装和环境配置4.创建简单的Qt项目 1.前端开发简单分类 前端开发&#xff0c;这里是一个广义的概念&#xff0c;不单指网页开发&#xff0c;它的常见分类 网页开发&#xff1a;前端开发的主要领域&#xff0c;使用HTML、CSS …

qt-C++笔记之捕获鼠标滚轮事件并输出滚轮角度增量

qt-C笔记之捕获鼠标滚轮事件并输出滚轮角度增量 code review! 文章目录 qt-C笔记之捕获鼠标滚轮事件并输出滚轮角度增量1.运行2.main.cpp3.main.pro 1.运行 2.main.cpp #include <QApplication> #include <QWidget> #include <QWheelEvent> #include <…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-消息队列queue

目录 一、消息队列基本概念二、消息队列运行机制三、消息队列开发流程四、消息队列使用说明五、消息队列接口六、代码分析&#xff08;待续...&#xff09;坚持就有收获 一、消息队列基本概念 队列又称消息队列&#xff0c;是一种常用于任务间通信的数据结构。队列接收来自任务…

Json-序列化字符串时间格式问题

序列化字符串时间格式问题 一、项目场景二、问题描述三、解决方案 一、项目场景 最近C#中需要将实体进行json序列化&#xff0c;使用了Newtonsoft.Json public static void TestJson(){DataTable dt new DataTable();dt.Columns.Add("Age", Type.GetType("Sys…

【数据库】哪些操作会导致索引失效

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;数据库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 结语 我的其他博客 前言 在数据库管理中&#xff0c;索引的有效性对于查询性能至关重要。然而&#xff0c;索引可能会因为各种操…

插值(一)——多项式插值(C++)

插值 插值的作用是可以将原本比较难计算的函数转换为误差在一定范围内的多项式&#xff0c;比如在单片机中直接计算 x 、 log ⁡ 2 x \sqrt{x}、\log_2x x ​、log2​x之类的函数是比较麻烦的&#xff0c;但是使用插值的方法就可以将其转换为误差可控的只有乘法和加减法的多项…
最新文章