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

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

三、完善程序题

第一题 九宫格

请完善下面的程序,将1~9个数字分别填人3x3的九宫格中,第一行的三个数字组成一个三位数。要使第二行的三位数是第一行的2倍,第三行的三位数是第一行的3倍且每个格子里的数字都不能重复,现在要求输出所有的填充方案,以每种方案中的第一行组成的三位数升序输出。

输出格式:

每一种方案输出共三行,每行中每两个数没有空格,每种方案输出后要输出一个空行。

最后一行一个数字,表示方案的总数。

#include<bits/stdc++.h>
using namespace std;
#define n 9
int a[10],b[10],t1,t2,t3,c;
void f(int s){int i;if(①){t1=a[1]*100+a[2]*10+a[3];t2=a[4]*100+a[5]*10+a[6];t3=a[7]*100+a[8]*10+a[9];if(②){cout<<t1<<endl<<t2<<endl<<t3<<endl<<endl;c++;}return;}for(i=1;i<=n;i++){if(b[i]==0){___③___b[i]=1;___④______⑤___}}
}
int main()
{f(1);cout<<c<<endl;
}

程序分析:此程序是通过回溯法找到满足条件的1-9的三个宫格里面的数字,首先定义了两个数组a和b,其中a用于存放1-9的数,b用于标记是否已经使用过某个数。函数f用于递归地生成所有可能的排列。参数s表示当前要填入的位置。当s等于n+1时,表示已经生成了一个完整的排列。然后计算t1、t2和t3的值,并判断是否满足条件。如果满足条件,则输出t1、t2和t3,并将计数器c加1。在f函数中,通过for循环尝试将1-9的数填入当前位置s,如果某个数i没有被使用过,则将它填入a[s],并将b[i]标记为已使用。然后递归调用f函数继续填下一个位置s+1。递归回来后,需要将b[i]标记为未使用,以便后续的排列。

单选题

①处应该填

A. s==n+1
B. s==n
C. s<n
D. s>=n

答案:A

答案分析:此处要填的是完成了一次9个数字的排列,所以答案A

②处应该填

A. t3*2==t2&&t3*3==t1
B. t1*2==t2&&t2*3==t3
C. t1*3==t2&&t1*2==t3
D. t1*2==t2&&t1*3==t3

答案:D

答案分析:此处是满足第二行是第一行2倍,第三行是第一行三倍,所以答案D

③处应该填

A. a[c]=i;
B. a[s]=i;
C. a[i]=s;b[c]=i; 
D. b[s]=i;

答案:B

答案分析:此处是要将第s个位置上的数填上i,所以答案B

④处应该填

A. f(i+1);
B. f(s+1);
C. f(c+1);
D. f(c+i+1):

答案:B

答案分析:填完第s个数字后,往后填s+1个位置对应的数,所以答案B

⑤处应该填

A. a[s]=0;
B. f(s-1);
C. a[s]=i;
D. b[i]=0:

答案:D

答案分析:填完了数字,需要回溯,将i标记为未使用,所以答案D

第二题 拓扑排序

输人一张n节点m条边的有向图,用求该图的一个拓扑排序的方式判断该图是否存在有向环,若有拓扑排序输出拓扑排序,并输出“不存在有向环”,否则直接输出“存在有向环”。

输人:
第一行两个正整数n,m表示节点数和边数。
接下来 m行,每行2个正整数x,y表示节点 x->y 之间有一条边。
输出:
一个拓扑序:按拓扑序输出点的编号。若拓扑序不唯一,输出任意一个均可,并输出“存在有向环”。若无拓扑序,直接输出“不存在有向环”.

#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#define N 1001
using namespace std;
int n,m,x,y;
vector<int>G[N];
stack<int>q;
int cnt[N],tpc;
bool pd()
{for(int i=l;i<=n;i++)if(__①__)q.push(i);while(!q.empty()){int u=q.top();q.pop();tpc++;cout<<u<<" ";for(int i=0;i<G[u].size();i++){int v=G[u][i];__②__if(!cnt[v])__③__}}if(__④__)return 1;else return 0;
}int main()
{cin>>n>>m;while(m--){cin>>x>>y;G[x].push_back(y);__⑤__}if(pd())cout<<"存在有向环";else cout<<"不存在有向环";
}

程序分析:此程序的主要思路是使用拓扑排序来判断有向图是否存在环。

首先,定义了一个函数pd()用来进行拓扑排序和判断是否存在有向环。在pd()函数中,首先初始化了一个栈q和一个计数器tpc,用来存储拓扑排序的结果。然后,将所有入度为0的节点压入栈q中。接下来,利用栈q进行拓扑排序的过程,依次从栈中弹出节点u,将节点u输出,并将u的所有邻接节点的入度减1。然后,如果某个邻接节点的入度变为0,就将该节点压入栈q中。最后,判断tpc的值是否等于节点个数n,若相等则表示不存在有向环,否则存在有向环。

单选题

①处应该填

A. !cnt[i]
B. cnt[i]
C. cnt[i]=0
D. cnt[i]==1

答案:A

答案分析:此处就似乎将所有入读为0的节点压入栈q中;所以答案A

②处应该填

A. q.push(v);
B. q. pop( );
C. cnt[u]--;
D. cnt[v]--;

答案:D

答案分析:此处就是将相邻节点的入度减1,所以答案D

③处应该填

A. q.pop();
B. q.push(v);
C. tpc--;
D. tpc++;

答案:B

答案分析:此处就是将入度为0的节点压入栈中;所以答案B

④处应该填

A. tpc!=n
B. tpc==n
C. tpc==0
D. tpc!=0

答案:A

答案分析:这里双分支条件是计数器不等于输入n就表示存在有向环,否则就是不存在,所以答案A

⑤处应该填

A. cnt[x]++;
B. G[y].push(x)
C. cnt[y]++;
D. push_back(x)

答案:C

答案分析:此处是更新节点y的入度,所以答案C

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频剪辑|FFMPEG|windows10下的音视频格式转换,遮挡填充,GIF动图制作,背景音频抽取,替换

前言&#xff1a; 最近对于音视频和图像的处理问题比较感兴趣&#xff0c;但发现很多目前需要的功能要么需要付费但不会过于麻烦&#xff0c;要么比较麻烦&#xff0c;很可能某个功能实现需要安装很多软件 例如&#xff0c;视频转GIF动图&#xff0c;该功能的实现要么使用Pho…

Vue源码系列讲解——模板编译篇【三】(HTML解析器)

目录 1. 前言 2. HTML解析器内部运行流程 3. 如何解析不同的内容 3.1 解析HTML注释 3.2 解析条件注释 3.3 解析DOCTYPE 3.4 解析开始标签 3.5 解析结束标签 3.6 解析文本 4. 如何保证AST节点层级关系 5. 回归源码 5.1 HTML解析器源码 5.2 parseEndTag函数源码 6. …

HTML世界之第二重天

目录 一、HTML 格式化 1.HTML 文本格式化标签 2.HTML "计算机输出" 标签 3.HTML 引文, 引用, 及标签定义 二、HTML 链接 1.HTML 链接 2.HTML 超链接 3.HTML 链接语法 4.文本链接 5.图像链接 6.锚点链接 7.下载链接 8.Target 属性 9.Id 属性 三、HTML …

二、docker compose安装

docker compose安装 docker compose的所有版本&#xff1a;https://github.com/docker/compose/releases # 安装步骤 # 1.下载docker compose&#xff1a;v2.5.0是docker-compose版本 curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-lin…

单片机基础入门:简单介绍51单片机的工作原理

在电子技术领域&#xff0c;单片机是实现智能化控制不可或缺的关键元件。它们集成了许多功能于一身&#xff0c;成为了各种电子系统的心脏。为了更好地理解单片机如何工作&#xff0c;本文将重点介绍51单片机的基本组成和工作原理。 51单片机是一种广泛使用的微控制器&#xf…

Flaurm实现中文搜索

目录 摘要需求本文涉及环境情况如下解决方案最终效果文章其他链接&#xff1a; 摘要 Flarum本身对中文支持并不理想&#xff0c;但随着版本更新&#xff0c;逐渐加强了对中文的优化。然而在1.8.5版本&#xff0c;却还是不支持中文搜索网站文章内容。作者在检索了全网教程&#…

uniapp API文档地址 以及 HBuilder安装

uniapp API文档地址 以及 HBuilder安装 一、进入 当前网站 uni-app 官网 [uni-app](https://zh.uniapp.dcloud.io/quickstart-hx.html)二、点击截图下载文件 三、 进入 当前网站 &#xff08;https://www.dcloud.io/hbuilderx.html&#xff09; 浏览器会识别 也可以自行选择…

【STM32 CubeMX】GPIO_HAL库源码分析

文章目录 前言一、GPIO_HAL库源码分析1.1 初始化GPIO1.2 HAL_GPIO_Init源码分析GPIO_InitTypeDef初始化结构体HAL_GPIO_Init函数 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技…

MockServer 服务框架设计

大部分现有的 mock 工具只能满足 HTTP 协议下简单业务场景的使用。但是面对一些复杂的业务场景就显得捉襟见肘&#xff0c;比如对 socket 协议的应用进行 mock&#xff0c;或者对于支付接口的失败重试的定制化 mock 场景。 为解决上述问题&#xff0c;霍格沃兹测试学院设计并研…

Day 44 | 动态规划 完全背包、518. 零钱兑换 II 、 377. 组合总和 Ⅳ

完全背包 题目 文章讲解 视频讲解 完全背包和0-1背包的区别在于&#xff1a;物品是否可以重复使用 思路&#xff1a;对于完全背包问题&#xff0c;内层循环的遍历方式应该是从weight[i]开始一直遍历到V&#xff0c;而不是从V到weight[i]。这样可以确保每种物品可以被选择多次…

【机器学习】数据清洗之处理异常点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…

比特币突破5万美元,2年来首次

作者&#xff1a;秦晋 2月13日凌晨&#xff0c;时隔两年&#xff0c;比特币首次突破50000美元关口。最高触及50363美元、24小时涨幅3.53%。创下2021年12月以来的新高。 据《财富》报道&#xff0c;本次上涨得益于三方面&#xff0c;首先是比特币ETF资金流入&#xff0c;比特币E…