




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2022CCF非专业级别软件能力认证第一轮(CSPJ1)入门级C++语言试题认证时间:2022年9月18日09:30~11:30考生注意事项:试题纸共有12页,答题纸共有1页,满分100分。请在答题纸上作答,写在试题纸上的一律无效。不得使用任何电子设备(如计算器、、电子词典等)或查阅任何书籍资料。一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)1.以下哪种功能没有涉及C++语言的面向对象特性支持()A.C++中调用printf函数B.C++中调用用户定义的类成员函数C.C++中构造一个class或structD.C++中构造来源于同一基类的多个派生类【答案】A【解析】【详解】本题考查的知识点是C++语言代码分析。printf是C语言中就可以使用的函数,而C++中定义类或结构体,对象调用成员函数,构造派生类,都是面向对象语言才能支持的操作。故答案为A选项。2.有6个元素,按照6、5、4、3、2、1的顺序进入栈S,请问下列哪个出栈序列是非法的()A.543612 B.453126C.346521 D.234156【答案】C【解析】【详解】本题考查的知识点是入栈出栈序列问题,解题方法为:如果数值a出栈,那么在a前入栈的元素要么已出栈,要么顺序地排列在栈中。C选项中,当4出栈时,4前入栈的6,5一定都在栈中,情况为:栈底65。所以接下来不可能是6出栈,只能是5出栈。故答案为C选项。3.运行以下代码片段的行为是()intx=10;inty=201;int*p=&x;int*q=&y;p=q;A.将x的值赋为201 B.将y的值赋为101C.将q指向x的地址 D.将p指向y的地址【答案】D【解析】【详解】本题考查的知识点是C语言代码分析。p是指向x的指针,也就是x的地址。q是指向y的指针,也就是y的地址。把q赋值给p,也就是让p从指向x的指针变为指向y的指针。故答案为D选项。4.链表和数组的区别包括()A.数组不能排序,链表可以B.链表比数组能存储更多的信息C.数组大小固定,链表大小可动态调整D.以上均正确【答案】C【解析】【详解】本题考查的知识点是链表和数组知识。选项A:数组和链表都能做排序。比如冒泡排序,里面只有交换相邻元素的操作,这一操作在数组和链表中都可以做。选项B:链表和数组能存储的信息取决于其长度,哪个更长哪个能存储更多信息。C选项是正确的。一旦申请数组,数组的长度就是固定的了。而链表可以申请和释放结点,大小可以动态调整。故答案为C选项。5.对假设栈S和队列Q的初始状态为空。存在e1~e6六个互不相同的数据,每个数据按照进栈S、出栈S、进队列Q、出队列Q的顺序操作,不同数据间的操作可能会交错。已知栈S中依次有数据e1、e2、e3、e4、e5和e6进栈,队列Q依次有数据e2、e4、e3、e6、e5和e1出队列。则栈S的容量至少是()个数据。()A.2 B.3 C.4 D.6【答案】B【解析】【详解】本题考查的知识点是栈和队列数据结构。栈是后进先出,队列是先进先出。队列出队的顺序,就是队列入队的顺序。而队列入队的顺序,就是栈出栈的顺序。所以该题变为:已知入栈顺序是:e1,e2,e3,e4,e5,e6,出栈顺序是:e2,e4,e3,e6,e5,e1,请问在整个入栈出栈过程中栈中元素的最大个数。根据入栈出栈顺序,可知:根据上表可知栈中最大元素数量为3,也就是栈的最小容量是3。故答案为B选项。6.对表达式a+(bc)*d的前缀表达式为(),其中+、、*是运算符。()A.*+abcd B.+a*bcd C.abcd*+ D.abc+d【答案】B【解析】【详解】本题考查数据结构中前缀表达式。前缀表达式是指把运算符写在运算对象的前面,表达式a+(bc)*d先运算bc,变为bc。然后是X*d(X为bc),变为*Xd。把X的前缀表达式代入,为bcd。最后是a+X(X为(bc)*d),变为+aX,把X的前缀表达式代入,为+a*bcd。故选项B正确。。7.假设字母表{a,b,c,d,e}在字符串出现的频率分别为10%,15%,30%,16%,29%。若使用哈夫曼编码方式对字母进行不定长的二进制编码,字母d的编码长度为()位。()A.1 B.2 C.2或3 D.3【答案】B【解析】【详解】本题考查的知识点是哈夫曼树和哈夫曼编码。哈夫曼编码是一种非常有效的数据压缩编码方法,原理是:出现频率高的字符使用较短的编码,出现频率低的字符使用较长的编码。构建哈夫曼树的方法为:每次选取两个权值最小的结点,加上双亲结点构成一棵树。初始一共有5个结点,每个结点的权值分别为:a:10,b:15,c:30,d:16,e:29。选择权值最小的两个结点a和b,设结点f是a、b的双亲,权值25;选择权值最小的两个结点f和d,设结点g是f、d的双亲,权值41;选择权值最小的两个结点c和e,设结点h是c、e的双亲,权值59;选择权值最小的两个结点g和h,设结点i是g、h的双亲,权值100。构成的树如下图所示。在哈夫曼树中,从根结点开始,每向下走一层编码多1位。根据构造出来的哈夫曼树可知,d的编码是两位。故答案为B选项。8.一棵有n个结点的完全二叉树用数组进行存储与表示,已知根结点存储在数组的第1个位置。若存储在数组第9个位置的结点存在兄弟结点和两个子结点,则它的兄弟结点和右子结点的位置分别是()A.8、18 B.10、18 C.8、19 D.10、19【答案】C【解析】【详解】本题考查的知识点是二叉树知识。二叉树的顺序存储结构中,第i结点的左孩子的下标为2*i,右孩子的下标为2*i+1,双亲的下标为i/2。因此第9位置结点一定是第4结点的右孩子(左孩子下标都是偶数,右孩子下标都是奇数)。该结点的兄弟结点是4的左孩子,在数组中的下标应该比9少1,为8。9的右孩子的下标为9*2+1=19。故答案为C选项。9.考虑由N个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至少存在()个非零元素。()A.N1 B.N C.N+1 D.N2【答案】A【解析】【详解】本题考查的知识点是图论知识。有向连通图,分为强连通图、单向连通图、弱连通图。若把有向边都当做无向边,如果这个无向图是连通图,那么这个图是弱连通图。n个顶点的无向图,最少有n1条边。那么这个有向图中最少有n1条边,就可以构成弱连通图。有向图中每条边在邻接矩阵中就是一个元素,占一个位置,因此至少存在n1个非零元素。故答案为A选项。10.以下对数据结构的表述不恰当的一项为()A.图的深度优先遍历算法常使用的数据结构为栈B.栈的访问原则为后进先出,队列的访问原则是先进先出C.队列常常被用于广度优先搜索算法D.栈与队列存在本质不同,无法用栈实现队列【答案】D【解析】【详解】本题考查数据结构。图的深度优先遍历算法经常用递归来完成,而递归实际是利用了C++中的函数递归调用栈,本质上是使用了栈的结构,实际上,如果直接使用栈,也可以完成图的深度优先遍历。选项D中,栈与队列本质上都是功能受限的线性表,本质是相同的。用栈实现队列,虽然平时不会这样做,这样做也没什么意义,但还是可以实现的。比如设栈s1与s2来实现一个队列的功能:入队:元素入栈s1出队:如果栈s2不为空,那么栈s2出栈。如果s2为空,那么把s1中的所有元素出栈并入栈到s2,而后s2出栈。故答案为D选项。11.以下哪组操作能完成在双向循环链表结点p之后插入结点s的效果(其中,next域为结点的直接后继,prev域为结点的直接前驱)()A.p>next>prev=s;s>prev=p;p>next=s;s>next=p>next;B.p>next>prev=s;p>next=s;s>prev=p;s>next=p>next;C.s>prev=p;s>next=p>next;p>next=s;p>next>prev=s;D.s>next=p>next;p>next>prev=s;s>prev=p;p>next=s;【答案】D【解析】【详解】本题考查双向循环链表。观察选项可知,四个选项为这四个语句的不同排列:s>prev=p;s>next=p>next;p>next=s;p>next>prev=s;这里发生变化,又可能给其它量赋值的就是p>next。使p>next发生变化的语句为:p>next=s;而s>next=p>next;与p>next>prev=s;中用到的都应该是变化前的p>next,指向的是原来p的下一个结点。所以p>next=s;应该放在最后,故答案为D选项。12.以下排序算法的常见实现中,哪个选项的说法是错误的()A.冒泡排序算法是稳定的 B.简单选择排序是稳定的C.简单插入排序是稳定的 D.归并排序算法是稳定的【答案】B【解析】【详解】本题考查的知识点是排序算法的稳定性。选择排序是不稳定的,冒泡、插入、归并都是稳定的。故答案为B选项。13.八进制数对应的十进制数是()A. B. C. D.【答案】C【解析】【详解】本题考查的知识点是进制转换问题。八进制转十进制的方法为:按位权展开。整数部分:3∗81+2∗80=26,小数部分:1∗81=0.125。因此八进制32.1为十进制26.125。故答案为C选项。14.一个字符串中任意个连续的字符组成的子序列称为该字符串的子串,则字符串abcab有()个内容互不相同的子串。()A.12 B.13 C.14 D.15【答案】B【解析】【详解】本题考查字符串。字符串abcab内容互不相同的子串有:a、ab、abc、abca、abcab、b、bc、bca、bcab、c、ca、cab,空串,共13个。故选项B正确。15.以下对递归方法的描述中,正确的是()A.递归是允许使用多组参数调用函数的编程技术B.递归是通过调用自身来求解问题的编程技术C.递归是面向对象和数据而不是功能和逻辑的编程语言模型D.递归是将用某种高级语言转换为机器代码的编程技术【答案】B【解析】【详解】本题考查的知识点是递归算法。选项A:任意一个带参函数,都可以用多组参数来调用。选项B:论述正确。选项C:面向对象编程(或者说“类”)是面向对象和数据而不是功能和逻辑的编程语言模型。选项D:编译是将用某种高级语言转换为机器代码的编程技术。故答案为B选项。二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填×;除特殊说明外,判断题分,选择题3分,共计40分)16.01#include<iostream>0203usingnamespacestd;0405intmain()06{07unsignedshortx,y;08cin>>x>>y;09x=(x|x<<2)&0x33;10x=(x|x<<1)&0x55;11y=(y|y<<2)&0x33;12y=(y|y<<1)&0x55;13unsignedshortz=x|y<<1;14cout<<z<<endl;15return0;16}假设输入的x、y均是不超过15的自然数,完成下面的判断题和单选题:判断题(1)删去第7行与第13行的unsigned,程序行为不变。()(2)将第7行与第13行的short均改为char,程序行为不变。()(3)程序总输出一个整数“0”。()(4)当输入为“22”时,输出为“10”。()(5)当输入为“22”时,输出为“59”。()单选题(6)当输入为“138”时,输出为()A.“0”B.“209”C.“197”D.“226”【答案】①.正确②.错误③.错误④.错误⑤.错误⑥.B【解析】【详解】本题考查C++语言程序相关知识。&表示二进制“与”(都为1时,结果是1,否则是0)。|表示二进制“或”(有1时,结果是1,都是0时,结果为0)。C语言中以0x开头的数字表示十六进制数。(1)声明变量时是否加unsigned只影响对该机器数数值的认定,而不影响机器数本身。既然是short类型,这就是一个16位的机器数。所有位运算都是针对机器数的,程序行为不变。故说法正确。(2)char类型的变量是8位机器数。同样的位运算操作对16位与8位机器数操作的过程不一定是一样的。(例如对机器数10000000左移1位操作,如果是16位机器数,结果为100000000,如果是八位机器数,结果为00000000)。故说法错误。(3)结合所有题目,也能看出不可能对于什么输入,输出的都是0,否则后面三题都当做结果是0好了。直接算后面的问题,如果结果不为0,那么该题就是错误的。(4)(5)输入x是2,y是2。计算:x=(x|x<<2)&0x33;注意:左移运算符<<的优先级比按位或|的优先级更高。左移1位是乘2,左移2位是乘4,因此x<<2值为2*4=8,二进制为1000,二者按位或,即x|x<<2的结果为1010,扩展到8位为00001010,0x33的二进制形式为00110011,x=(x|x<<2)&0x33=00000010。同理计算x=(x|x<<1)&0x55=00000100;y=(y|y<<1)&0x55=00000100;z=x|y<<1=00001100,即输出结果为12。故(4)、(5)都是错误。(6)x是13,即1101,y是8,即1000。x=(x|x<<2)&0x33=0011001、x=(x|x<<1)&0x55=0101001、y=(y|y<<2)&0x33=00100000、y=(y|y<<1)&0x55=01000000、z=x|y<<1=11010001,转化为十进制就是209。故选项B正确。17.01#include<algorithm>02#include<iostream>03#include<limits>0405usingnamespacestd;0607constintMAXN=105;08constintMAXK=105;0910inth[MAXN][MAXK];1112intf(intnintm)13{14if(m==1)returnn;15if(n==0)return0;1617intret=numeric_limits<int>::max();18for(inti=1;i<=n;i++)19ret=min(ret,max(f(ni,m),f(i1,m1))+1);20returnret;21}2223intg(intn,intm)24{25for(inti=1;i<=n;i++)26h[i][1]=i;27for(intj=1;j<=m;j++)28h[0][j]=0;2930for(inti=1;i<=n;i++){31for(intj=2;j<=m;j++){32h[i][j]=numeric_limits<int>::max();33for(intk=1;k<=i;k++)34h[i][j]=min(35h[i][j],36max(h[ik][j],h[k1][j1])+1);37}38}3940returnh[n][m];41}4243intmain()44{45intn,m;46cin>>n>>m;47cout<<f(n,m)<<endl<<g(n,m)<<endl;48return0;49}假设输入的n、m均是不超过100的正整数,完成下面的判断题和单选题:判断题(1)当输入为“73”时,第19行用来取最小值min函数执行了449次。()(2)输出的两行整数总是相同的。()(3)当m为1时,输出的第一行总为n。()单选题(4)算法g(n,m)最为准确的时间复杂度分析结果为()。A.0(n3/2m)B.0(nm)C.0(n2m)D.0(nm2)(5)当输入为“202”时,输出的第一行为()。A.“4”B.“5”C.“6”D.“20”(6)当输入为“100100”时,输出的第一行为()。A.“6”B.“7”C.“8”D.“9”【答案】①.错误②.正确③.正确④.C⑤.C⑥.B【解析】【详解】本题考查的知识点是C++语言程序综合分析。(1)答:错误。观察f函数,对于一次调用f(n,m),for循环中内容就要执行n次,也就是说会调用min函数n次。统计所有的递归调用,将n加和即可。记c(n,m)为f(n,m)运行时min函数的调用次数,为递归调用中min调用次数的加和,再加上f(n,m)中对min的n次调用。用填表法,实际是递推的方式,从m,n值小的情况逐步推到值大的情况。算几个后就能看出规律,其中c(n,2)=c(n−1,2)∗2+1,c(n,3)=2∗c(n−1,3)+c(n−1,2)+1。得到运行f(7,3)时min的调用次数为448次,不是449次。故答案为错误。(2)正确。因为通过观察可知:f函数使用递归,g函数使用递推解决了相同的问题,结果是相同的。故答案为正确。(3)正确。递归函数f中,如果m1,会返回n。递推函数g中,当j为1时,h[i][j]为i。那么返回值h[n][m]一定为n。故答案为正确。(4)选C。第25,26行循环n次,复杂度为O(n)。第27,28行循环m次,复杂度为O(m)。对于第30,31行,谁在内层谁在外层都不影响最内层代码执行的次数。我们把for(intj=2;j<=m;++j)当做外层,这一层近似于循环m次,对于第33行for(intk=1;k<=i;++k),i是1时循环1次,i是2时循环2次,。。。,i是n时循环n次,那么在j固定时,i从1循环到n,最内层循环体执行次数为1+2+...+n=(1+n)n/2,总执行次数为m⋅n(1+n)/2,整段代码的时间复杂度为:O(n)+O(m)+O(m⋅n(1+n)/2)=O(n2m)。故答案为C选项。(5)选C。模拟运行递推算法g函数,填表表中第i行第j列为h[i][j]的值j为1时,h[i][j]的值为1。h[i][j]的值为:k从1循环到i,max(h[ik][j],h[k1][j1])+1的最小值算过几个后就可以找到规律:j=1这一列从i=0开始从上向下看,j=2这一列从i1开始从下向上看,对应位置的数值求最大值,看哪一组求得的最大值最大,结果再加1,就是h[i][j]的值。算出一些数字后,就能发现规律:1个1,2个2,3个3,…,6个6。得到h[20][2]的值为6。故答案为C选项。(6)选B。尝试列出第三列,观察数值的变化规律。举例:在填h[4][3]时,根据规则,j=2这一列从i=0开始向下看,j=3这一列从i=2开始向上看,先比较h[0][2]和h[3][3],再分别比较h[1][2]与h[2][3],h[2][2]与h[1][3],h[3][2]与h[0][3],最大值都是2,加1后是3。所以h[4][3]填3。接下来用相同的方法填h[5][3],h[6][3],h[7][3]都是3。填h[8][3]时就是4了,思考为什么数值增大了呢?正是因为当填h[8][3]时,j=2这一列i从0到4值是0,1,2,2。j=3这一列i从7到4的值为3,3,3,3,最大值都为3,加1后是4。设想j=4时,i从0到7,h[i][4]的值与h[i][3]的值都相同,那么从h[8][4]开始,随着i的增大,需要填一些4,那么什么时候应该填5呢,需要让每个数对的最大值都是4,前面h[0][3]到h[7][3]是0,1,2,2,3,3,3,3,共8个数字,需要与后面8个数字4配对,这8个数字的位置应该为h[15][4]到h[8][4],这样最大值都是4,接下来h[8][3]往下都是4,与j=4的一列较小值配对,最大值都是4。因此第一个填5的位置应该是h[16][4],在它前面一共有8个4。j是2时确定了有2个2,j是3时确定了有4个3,j是4时就能确定有8个4,…,在j=100时,各项数值一定都已经进行了充分的计算,计算后,一列之中应该有1个0,1个1,2个2,4个3,8个4,16个5,32个6,64个7,列举出每个数字第一次出现的位置h[1][100]=1,h[2][100]=2,h[4][100]=3,h[8][100]=4,h[16][100]=5,h[32][100]=6,h[64][100]=7,h[128][100]=8因此h[100][100]的值为7。故答案为B选项。18.01#include<iostream>0203usingnamespacestd;0405intn,k;0607intsolve1()08{09intl=0,r=n;10while(l<=r){11intmid=(l+r)/2;12if(mid*mid<=n)l=mid+1;13elser=mid1;14}15returnl1;16}1718doublesolve2(doublex)19{20if(x==0)returnx;21for(inti=0;i<k;i++)22x=(x+n/x)/2;23returnx;24}2526intmain()27{28cin>>n>>k;29doubleans=solve2(solve1());30cout<<ans<<''<<(ans*ans==n)<<endl;31return0;32}假设int为为32位有符号整数类型,输入的n是不超过47000的自然数、k是不超过int表示范围的自然数,完成下面的判断题和单选题:判断题(1)该算法最准确的时间复杂度分析结果为0(logn+k)。()(2)当输入为“98011”时,输出的第一个数为“99”。()(3)对于任意输入的n,随着所输入k的增大,输出的第二个数会变成“1”。()(4)该程序有存在缺陷。当输入的n过大时,第12行的乘法有可能溢出,因此应当将mid强制转换为64位整数再计算。()单选题(5)当输入为“21”时,输出的第一个数最接近()。(6)当输入为“310”时,输出的第一个数最接近()。(7)当输入为“25611”时,输出的第一个数()。A.等于16B.接近但小于16C.接近但大于16D.前三种情况都有可能【答案】①.正确②.正确③.错误④.错误⑤.C⑥.B⑦.A【解析】【详解】本题考查的知识点是C++语言程序综合分析。(1)正确。solve1函数是二分算法,二分查找的范围为n,复杂度为O(logn),solve1求出值后,把值传给solve2函数。sovle2函数里面只有k次循环,复杂度为O(k),所以整体复杂度为O(logn+k)。故正确。(2)正确。sove1求出,sove2中x=99,k为1,for循环执行一次,x=(x+n/x)/2=(99+9801/99)/2=99输出ans为99。故正确。(3)错误。随着输入k的增大,输出的第二个数会接近或等于。故错误。(4)错误。题目限定了n最大是47000,第一次求出mid=n/2为23500,mid*mid为235002=552250000,int类型可以表示该数字,并不会溢出。故错误。(5)选C。solve1传入2,求出结果为=1。把1传入solve2,x为1,循环1次,x=(x+n/x)/2=(1+2/1)/2=1.5,函数的返回值,也就是ans的值为1.5。故选C。(6)选B。solve1传入3,求出结果为=1。把1传入solve2,x为1,循环10次,每次循环让x=(x+n/x)/2,用模拟运行法后面不用算了,我们通过分析程序已知x最终会不断接近的值,进行多次循环后,结果的前几位一定是1.732,不会改变。故选B。(7)选A。solve1的结果为=16,已知=16,所以在solve2中x=(x+n/x)/2=(16+256/16)/2=16,每次计算后x的值不变,都是16。因此最后输出的值等于16。故选A。三、完善程序(单选题,每小题3分,共计30分)19.(枚举因数)从小到大打印正整数n的所有正因数。试补全枚举程序。01#include<bits/stdc++.h>02usingnamespacestd;0304intmain(){05intn;06cin>>n;0708vector<int>fac;09fac.reserve((int)ceil(sqrt(n)));1011inti;12for(i=1;i*i<n;++i){13if(①){14fac.push_back(i);15}16}1718for(intk=0;k<fac.size();++k){19cout<<②<<"";20}21if(③){22cout<<④<<"";23}24for(intk=fac.size()1;k>=0;k){25cout<<⑤<<"";26}27}(1)①处应填()A.n%i==0B.n%i==1C.n%(i1)==0D.n%(i1)==1(2)②处应填()A.n/fac[k]B.fac[k]C.fac[k]1(fac[k]1)(3)③处应填()A.(i1)*(i1)==nB.(i1)*i==nC.i*i==nD.i*(i1)==n(4)④处应填()B.ni+1(5)⑤处应填()A.n/fac[k]B.fac[k]C.fac[k]1(fac[k]1)【答案】①.A②.B③.C④.D⑤.A【解析】【详解】本题考查的知识点是C++语言程序综合分析。先输入了n,第8行声明了一个vector类对象,名字为fac。factor是因数的意思,所以fac这个vector保存的是因数。第9行,ceil是向上取整(返回值类型是double),sqrt是开根号。第9行是把fac的容量设为。(1)这里就是把n的所有i2<n的因数保存在fac之中。数字i若是n的因数,那么n能整除i,n除以i的余数为0。故①处选A:n%i==0。(2)因为要从小到大打印n的所有因数,所以这里先把fac中所有满足i2<n的因数输出。输出fac中的第k个元素:fac[k]。故②处选B。(3)(4)接着是看是否有i2==n的情况,如果有则输出i。故③处选C:i*i==n,故④处选D:i。(5)最后输出i2>n的n的因数i。假设fac中的元素是a,b,c,d,那么接下来应该输出n/d,n/c,n/b,n/a。fac中的元素为:fac[0],fac[1],…,fac[fax.size()1],接下来应该输出的是:n/fac[fax.size()1],n/fac[fax.size()2],…,n/fac[0]。故⑤处选A:n/fac[k]。20.(洪水填充)现有用字符标记像素颜色的8x8图像。颜色填充的操作描述如下:给定起始像素的位置和待填充的颜色,将起始像素和所有可达的像素(可达的定义:经过一次或多次的向上、下、左、右四个方向移动所能到达且终点和路径上所有像素的颜色都与起始像素颜色相同),替换为给定的颜色。试补全程序。01#include<bits/stdc++.h>02usingnamespacestd;0304constintROWS=8;05constintCOLS=8;0607structPoint{08intr,c;09Point(intr,intc):r(r),c(c){}10};1112boolis_valid(charimage[ROWS][COLS],Pointpt,13intprev_color,intnew_color){14intr=pt.r;15intc=pt.c;16return(0<=r&&r<ROWS&&0<=c&&c<COLS&&17①&&image[r][c]!=new_color);18}1920voidflood_fill(charimage[ROWS][COLS],Pointcur,intnew_color){21queue<Point>queue;22queue.push(cur);2324intprev_color=image[cur.r][cur.c];25②;2627while(!queue.empty()){28Pointpt=queue.front();29queue.pop();3031Pointpoints[4]={③,Point(pt.r1,pt.c),32Point(pt.r,pt.c+1),Point(pt.r,pt.c1)};33for(autop:points){34if(is_valid(image,p,prev_color,new_color)){35④;36⑤;37}38}39}40}4142intmain(){43charimage[ROWS][COLS]={{'g','g','g','g','g','g','g','g'},44{'g','g','g','g','g','g','r','r'},45{'g','r','r','g','g','r','g','g'},46{'g','b','b','b','b','r','g','r'},47{'g','g','g','b','b','r','g','r'},48{'g','g','g','b','b','b','b','r'},49{'g','g','g','g','g','b','g','g'},50{'g','g','g','g','g','b','b','g'}};5152Pointcur(4,4);53charnew_color='y';5455flood_fill(image,cur,new_color);5657for(intr=0;r<ROWS;r++){58for(intc=0;c<COLS;c++){59cout<<image[r][c]<<"";60}61cout<<endl;62}63//输出:64//gggggggg65//ggggggrr66//grrggrgg67//gyyyyrgr68//gggyyrgr69//gg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公章合同范本模板
- ui设计兼职合同范本
- 上游电子销售合同范本
- 住宅抵押合同范本
- 借贷咨询合同范本
- 农村房车销售合同范本
- 农用器材采购合同范本
- 中美二十天然气合同范例
- 个人售卖二手车合同范本
- 出纳公司合同范本
- 重大事故隐患判定标准
- 新能源汽车驱动电机及控制系统检修课件 学习情境1:驱动电机的认知
- 2024年采购部年终总结
- 人教版(PEP)五年级英语下册第一单元测试卷-Unit 1 My day 含答案
- 打深水井施工方案
- 企业名称预先核准通知书
- 统筹管理方案
- 建筑工程安全文明施工标准化图集(附图丰富)
- Unit 1 Travel教案-2023-2024学年高一下学期 中职英语高教版(2023修订版)基础模块2
- DB3206T 1083-2024机关会议服务人员操作技术规范
- 习作《我的家人 》教案-2024-2025学年统编版语文四年级上册
评论
0/150
提交评论