2013吉林省数据要领基础
- 格式:pdf
- 大小:128.85 KB
- 文档页数:4
2013年吉林省行测资料分析高频考点之基期比重我们在上一篇文章里面已经详细的讲解了末期比重,现在我们将重点讲解基期比重,这两个看似相同,但是两者之间存在本质的区别,一个计算的是末期,一个计算的是基期,其计算的时期是有所区别的,所以如果当把基期比重看作是末期比重的时候,最终得到的结果必然错误,当然了这个考点在2013年吉林省也经常出现,所以我们在解答这类试题的时候,一定要熟悉题型的本质,并掌握相应的解题方法。
基期比重,是资料分析试题里面有一定难度的试题,这类试题的计算量往往较大,涉及到的数据较多,一般会涉及到末期的部分、整体的值,以及部分整体的变化量,从而需要我们先求出基期部分或者整体的值,然后才能求基期比重,根据给出的变化量的不同,我们可以将基期比重类试题的出题形式分为以下几种形式:(一)给出的变化量是增加量,这时,我们就需要先通过加减运算计算出基期的值,然后根据比重=部分/整体来求解;【注意】我们在解答这类试题的时候,由于有一定的计算量,所以一般给出的选项的差距比较大,那么我们就可以直接采用放缩估算来解答。
(二)给出的变化量一个是增加量,一个是增速,那么此时,我们仍然需要先计算出基期值,然后根据公式计算,或者我们可以根据增加量估算出这个增速,然后根据第三种出题形式的试题解题方法来解答。
(三)给出的变化量是增速,这类试题是我们比较常见的试题,在解答此类试题的时候,一般先计算末期比重,然后根据增速来确定基期比重。
【真题示例】2012年末,全省机动车驾驶员数量为908.77万人,比上年增加121.47万人。
其中,汽车驾驶员数量为622.65万人,比上年增长20.5%。
89.2011年,汽车驾驶员数量占全省机动车驾驶员的比重为( )。
A.59.8%B.65.6%C.71.4%D.75.6%【答案】B【解析】本题考查的是比重这一知识点。
根据材料相关数据可知,2011年全省机动车驾驶员为908-121.47,汽车驾驶员数量为622.65/(1+20.5%),由于选项的差别比较大,所以计算比重的时候,可以进行粗略的估算。
1、设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。
算法应对异常情况(入栈满等)给出相应的信息。
设有一个背包可以放入的物品重量为S,现有n件物品,重量分别为W1,W2,...,Wn。
问能否从这n件物品中选择若干件放入背包,使得放入的重量之和正好是S。
设布尔函数Knap(S,n)表示背包问题的解,Wi(i=1,2,...,n)均为正整数,并已顺序存储地在数组W中。
请在下列算法的下划线处填空,使其正确求解背包问题。
Knap(S,n)若S=0则Knap←true否则若(S<0)或(S>0且n<1)则Knap←false否则若Knap(1) , _=true则print(W[n]);Knap ←true否则 Knap←Knap(2) _ , _设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈顺序为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为多少?画出具体进栈、出栈过程。
假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间。
例如:设str1和str2是分别指向两个单词的头结点,请设计一个尽可能的高效算法,找出两个单词共同后缀的起始位置,分析算法时间复杂度。
将n(n>1)个整数存放到一维数组R中。
设计一个尽可能高效(时间、空间)的算法,将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据(x0, x1, x2,…, xn-1),变换为(xp, xp+1, … , xn-1 ,x0 , x1,…, xp-1)。
2、在有向图G中,如果r到G中的每个结点都有路径可达,则称结点r为G的根结点。
编写一个算法完成下列功能:(1).建立有向图G的邻接表存储结构;(2).判断有向图G是否有根,若有,则打印出所有根结点的值。
1、假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。
(注:图中不存在顶点到自己的弧)有向图判断回路要比无向图复杂。
利用深度优先遍历,将顶点分成三类:未访问;已访问但其邻接点未访问完;已访问且其邻接点已访问完。
下面用0,1,2表示这三种状态。
前面已提到,若dfs(v)结束前出现顶点u到v的回边,则图中必有包含顶点v和u的回路。
对应程序中v的状态为1,而u是正访问的顶点,若我们找出u的下一邻接点的状态为1,就可以输出回路了。
void Print(int v,int start ) //输出从顶点start开始的回路。
{for(i=1;i<=n;i++)if(g[v][i]!=0 && visited[i]==1 ) //若存在边(v,i),且顶点i的状态为1。
{printf(“%d”,v);if(i==start) printf(“\n”); else Print(i,start);break;}//if}//Printvoid dfs(int v){visited[v]=1;for(j=1;j<=n;j++ )if (g[v][j]!=0) //存在边(v,j)if (visited[j]!=1) {if (!visited[j]) dfs(j); }//ifelse {cycle=1; Print(j,j);}visited[v]=2;}//dfsvoid find_cycle() //判断是否有回路,有则输出邻接矩阵。
visited数组为全局变量。
{for (i=1;i<=n;i++) visited[i]=0;for (i=1;i<=n;i++ ) if (!visited[i]) dfs(i);}//find_cycle2、设T是一棵满二叉树,编写一个将T的先序遍历序列转换为后序遍历序列的递归算法。
1、设单链表中指针p指着结点A,若要删除A之后的结点(若存在),则需要修改指针的操作为( A )。
A)p->next=p->next->next B)p=p->nextC)p=p->nexe->next D)p->next=p2、倘若在对串的插入、删除运算中,期望运算速度最快,则应采用( C )。
A)顺序表示法 B)单字符为结点的单链表表示法C)等量分块表示法 D)不等量分块表示法3、在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行( A )。
A)q->next=s; s->next=p; B)s->next=p->next; p->next=s;C)p->next=s->next; s->next=p D)p->next=s; s->next=q;4、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是( B )。
A)9 B)11 C)15 D)不能确定5、对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。
这样的排序方法是( A )。
A)直接选择排序 B)直接插入排序C)快速排序 D)起泡排序6、队列的操作的原则是( A )。
A)先进先出 B) 后进先出C) 只能进行插入 D) 只能进行删除7、n个顶点的图的最小生成树必定( D ),是不正确的描述。
A)不唯一 B)权的总和唯一C)不含回路 D)有n条边8、数据结构研究的内容是( D )。
A)数据的逻辑结构 B)数据的存储结构C)建立在相应逻辑结构和存储结构上的算法 D)包括以上三个方面9、下列序列中,执行第一趟快速排序后得到的序列是( A )。
A)[d,a,e,d,b]f[h,g] B) [c,e,a,d]f[h,g,b]C) [g,a,e,c,b]f[d,h] D) [a,b,c,d,]f[e,g,h]10、采用链结构存储线性表时,其地址( B )。
2013年吉林省行测资料分析高频考点之末期比重2013年吉林省的公务员考试在9月份就要举行了,相信大家对于资料分析或者其他部分的复习已经告一段落,那接下来的这段时间,我们的复习就要有针对性了,所谓针对性就是针对行测的出题规律,以及高频考点来总结复习,所谓高频考点,就是我们在做题的时候遇到的考点,比如说增长率,比如说基期,在此,我们将重点讲解末期比重这个知识点。
在资料分析里面,末期比重类试题最基本的出题类型就是给出了部分和整体的具体值,然后让我们求部分所占的比重,但是在近几年,随着试题难度的增大,这类试题逐渐出现了变形,就是在试题里面并没有明确的给出部分或者整体的具体值,需要我们经过一定的计算,这样才能得到最终的结果,这类变形,在近几年出现的概率变大。
比如说,已知2012年东北三省的地区生产总值是A亿元,其中,黑龙江省的地区生产总值达到了B亿元,比吉林省多C亿元,那么在2010年吉林省地区生产总值占东北三省的比重约为多少?在这个试题里面,我们就要先求出吉林省在2012年的地区生产总值(B-C亿元),也就是先要求出部分的具体值,然后才能根据公式来计算比重值。
【真题示例】2011年某省广电产业实际创收收入达192.98亿元,同比增长32.33%。
从层级分析:省级收入100.64亿元,同比增长54.07%。
地市级收入47.36亿元,同比增长13.82%;县级收入44.98亿元,同比增长15.63%。
从区域分析:省以下实际创收92.34亿元,其中南部地区占60.63%,中部地区占22.66%,北部地区占16.71%。
创收过亿元的县达13个,其中南部8个,中部5个,13县共创收24.77亿元。
104.2011年该省创收过亿元的县创收合计全省县级总创收的比重约为()。
A.13%B.27%C.41%D.55%【答案】D【解析】本题考查的是比重这一知识点。
根据材料相关数据可知,2011年该省创收过亿元的县创收合计全省县级总创收的比重为24.77/44.98,很明显该值大于50%,结合选项,选择D选项。
1、若第n件物品能放入背包,则问题变为能否再从n-1件物品中选出若干件放入背包(这时背包可放入物品的重量变为s-w[n])。
若第n件物品不能放入背包,则考虑从n-1件物品选若干件放入背包(这时背包可放入物品仍为s)。
若最终s=0,则有一解;否则,若s<0或虽然s>0但物品数n<1,则无解。
(1)s-w[n],n-1 //Knap(s-w[n],n-1)=true(2)s,n-1 // Knap←Knap(s,n-1)2、给出折半查找的递归算法,并给出算法时间复杂度性分析。
3、设T是一棵满二叉树,编写一个将T的先序遍历序列转换为后序遍历序列的递归算法。
4、两棵空二叉树或仅有根结点的二叉树相似;对非空二叉树,可判左右子树是否相似,采用递归算法。
int Similar(BiTree p,q) //判断二叉树p和q是否相似{if(p==null && q==null) return (1);else if(!p && q || p && !q) return (0);else return(Similar(p->lchild,q->lchild) && Similar(p->rchild,q->rchild)) }//结束Similar5、#define maxsize 栈空间容量void InOutS(int s[maxsize])//s是元素为整数的栈,本算法进行入栈和退栈操作。
{int top=0; //top为栈顶指针,定义top=0时为栈空。
for(i=1; i<=n; i++) //n个整数序列作处理。
{scanf(“%d”,&x); //从键盘读入整数序列。
if(x!=-1) // 读入的整数不等于-1时入栈。
if(top==maxsize-1){printf(“栈满\n”);exit(0);}else s[++top]=x; //x入栈。
1、矩阵中元素按行和按列都已排序,要求查找时间复杂度为O(m+n),因此不能采用常规的二层循环的查找。
可以先从右上角(i=a,j=d)元素与x比较,只有三种情况:一是A[i,j]>x,这情况下向j 小的方向继续查找;二是A[i,j]<x,下步应向i大的方向查找;三是A[i,j]=x,查找成功。
否则,若下标已超出范围,则查找失败。
void search(datatype A[ ][ ], int a,b,c,d, datatype x)//n*m矩阵A,行下标从a到b,列下标从c到d,本算法查找x是否在矩阵A中.{i=a; j=d; flag=0; //flag是成功查到x的标志while(i<=b && j>=c)if(A[i][j]==x) {flag=1;break;}else if (A[i][j]>x) j--; else i++;if(flag) printf(“A[%d][%d]=%d”,i,j,x); //假定x为整型.else printf(“矩阵A中无%d 元素”,x);}算法search结束。
[算法讨论]算法中查找x的路线从右上角开始,向下(当x>A[i,j])或向左(当x<A[i,j])。
向下最多是m,向左最多是n。
最佳情况是在右上角比较一次成功,最差是在左下角(A[b,c]),比较m+n次,故算法最差时间复杂度是O(m+n)。
2、给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。
20分void Hospital(AdjMatrix w,int n)//在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。
吉林省2013年国民经济和社会发展统计公报文章属性•【制定机关】吉林省统计局•【公布日期】•【字号】•【施行日期】•【效力等级】地方规范性文件•【时效性】现行有效•【主题分类】统计正文吉林省2013年国民经济和社会发展统计公报(吉林省统计局2014年)2013年,面对错综复杂的国内外经济环境和较为严重的自然灾害,全省各族人民在省委、省政府的坚强领导下,同心同德、克难进取,积极推进经济发展方式转变,努力改善人民生活水平,保障了全省经济的持续健康发展和社会的和谐稳定。
一、综合初步核算,全省实现地区生产总值[2]12981.46亿元,按可比价格计算,比上年增长8.3%。
其中,实现第一产业增加值1509.34亿元,增长4.0%;实现第二产业增加值6858.23亿元,增长8.8%;实现第三产业增加值4613.89亿元,增长8.7%。
按常住人口计算,全省人均GDP达到47191元(按年平均汇率折合7620.53美元),比上年增长8.2%。
三次产业的结构比例为11.6 : 52.8 : 35.6,对经济增长的贡献率分别为5.0%、57.5%和37.5%。
全省民营经济实现增加值6607.6亿元,占全省地区生产总值的比重为50.9%;民营经济实现主营业务收入26728亿元,增长16.1%。
万元GDP综合能耗降低率为6.03%;规模以上工业万元增加值综合能耗降低率为8.41%。
图1:2009-2013年全省地区生产总值及其增长速度2013年全省居民消费价格总指数为102.9(以上年为100,下同),价格总水平同比上涨2.9%。
其中,农村居民消费价格总指数为102.9,上涨2.9%;城市居民消费价格总指数为102.9,上涨2.9%。
农业生产资料价格指数为100.8,上涨0.8%;工业生产者出厂价格指数为98.7,下降1.3%;工业生产者购进价格指数为99.4,下降0.6%;固定资产投资价格指数为 100%,与上年持平。
1、题目中要求矩阵两行元素的平均值按递增顺序排序,由于每行元素个数相等,按平均值排列与按每行元素之和排列是一个意思。
所以应先求出各行元素之和,放入一维数组中,然后选择一种排序方法,对该数组进行排序,注意在排序时若有元素移动,则与之相应的行中各元素也必须做相应变动。
void Translation(float *matrix,int n)//本算法对n×n的矩阵matrix,通过行变换,使其各行元素的平均值按递增排列。
{int i,j,k,l;float sum,min; //sum暂存各行元素之和float *p, *pi, *pk;for(i=0; i<n; i++){sum=0.0; pk=matrix+i*n; //pk指向矩阵各行第1个元素.for (j=0; j<n; j++){sum+=*(pk); pk++;} //求一行元素之和.*(p+i)=sum; //将一行元素之和存入一维数组.}//for ifor(i=0; i<n-1; i++) //用选择法对数组p进行排序{min=*(p+i); k=i; //初始设第i行元素之和最小.for(j=i+1;j<n;j++) if(p[j]<min) {k=j; min=p[j];} //记新的最小值及行号.if(i!=k) //若最小行不是当前行,要进行交换(行元素及行元素之和){pk=matrix+n*k; //pk指向第k行第1个元素.pi=matrix+n*i; //pi指向第i行第1个元素.for(j=0;j<n;j++) //交换两行中对应元素.{sum=*(pk+j); *(pk+j)=*(pi+j); *(pi+j)=sum;}sum=p[i]; p[i]=p[k]; p[k]=sum; //交换一维数组中元素之和.}//if}//for ifree(p); //释放p数组.}// Translation[算法分析] 算法中使用选择法排序,比较次数较多,但数据交换(移动)较少.若用其它排序方法,虽可减少比较次数,但数据移动会增多.算法时间复杂度为O(n2).2、将顶点放在两个集合V1和V2。
对每个顶点,检查其和邻接点是否在同一个集合中,如是,则为非二部图。
为此,用整数1和2表示两个集合。
再用一队列结构存放图中访问的顶点。
int BPGraph (AdjMatrix g)//判断以邻接矩阵表示的图g是否是二部图。
{int s[]; //顶点向量,元素值表示其属于那个集合(值1和2表示两个集合)int Q[];//Q为队列,元素为图的顶点,这里设顶点信息就是顶点编号。
int f=0,r,visited[]; //f和r分别是队列的头尾指针,visited[]是访问数组for (i=1;i<=n;i++) {visited[i]=0;s[i]=0;} //初始化,各顶点未确定属于那个集合Q[1]=1; r=1; s[1]=1;//顶点1放入集合S1while(f<r){v=Q[++f]; if (s[v]==1) jh=2; else jh=1;//准备v的邻接点的集合号if (!visited[v]){visited[v]=1; //确保对每一个顶点,都要检查与其邻接点不应在一个集合中for (j=1,j<=n;j++)if (g[v][j]==1){if (!s[j]) {s[j]=jh; Q[++r]=j;} //邻接点入队列else if (s[j]==s[v]) return(0);} //非二部图}//if (!visited[v])}//whilereturn(1); }//是二部图[算法讨论] 题目给的是连通无向图,若非连通,则算法要修改。
3、有一个带头结点的单链表,每个结点包括两个域,一个是整型域info,另一个是指向下一个结点的指针域next。
假设单链表已建立,设计算法删除单链表中所有重复出现的结点,使得info域相等的结点只保留一个。
#include <stdio.h>typedef char datatype;typedef struct node{datatype data;struct node * next;} listnode;typedef listnode* linklist;/*--------------------------------------------*//* 删除单链表中重复的结点 *//*--------------------------------------------*/linklist deletelist(linklist head){ listnode *p,*s,*q;p=head->next;while(p){s=p;q=p->next;while(q)if(q->data==p->data){s->next=q->next;free(q);q=s->next;}else{ s=q; /*找与P结点值相同的结点*/q=q->next;}p=p->next;}return head;}4、冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。
48.有n个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。
(注:双向起泡排序即相邻两趟排序向相反方向起泡)5、题目中要求矩阵两行元素的平均值按递增顺序排序,由于每行元素个数相等,按平均值排列与按每行元素之和排列是一个意思。
所以应先求出各行元素之和,放入一维数组中,然后选择一种排序方法,对该数组进行排序,注意在排序时若有元素移动,则与之相应的行中各元素也必须做相应变动。
void Translation(float *matrix,int n)//本算法对n×n的矩阵matrix,通过行变换,使其各行元素的平均值按递增排列。
{int i,j,k,l;float sum,min; //sum暂存各行元素之和float *p, *pi, *pk;for(i=0; i<n; i++){sum=0.0; pk=matrix+i*n; //pk指向矩阵各行第1个元素.for (j=0; j<n; j++){sum+=*(pk); pk++;} //求一行元素之和.*(p+i)=sum; //将一行元素之和存入一维数组.}//for ifor(i=0; i<n-1; i++) //用选择法对数组p进行排序{min=*(p+i); k=i; //初始设第i行元素之和最小.for(j=i+1;j<n;j++) if(p[j]<min) {k=j; min=p[j];} //记新的最小值及行号.if(i!=k) //若最小行不是当前行,要进行交换(行元素及行元素之和){pk=matrix+n*k; //pk指向第k行第1个元素.pi=matrix+n*i; //pi指向第i行第1个元素.for(j=0;j<n;j++) //交换两行中对应元素.{sum=*(pk+j); *(pk+j)=*(pi+j); *(pi+j)=sum;}sum=p[i]; p[i]=p[k]; p[k]=sum; //交换一维数组中元素之和.}//if}//for ifree(p); //释放p数组.}// Translation[算法分析] 算法中使用选择法排序,比较次数较多,但数据交换(移动)较少.若用其它排序方法,虽可减少比较次数,但数据移动会增多.算法时间复杂度为O(n2).6、二路插入排序是将待排关键字序列r[1..n]中关键字分二路分别按序插入到辅助向量d[1..n]前半部和后半部(注:向量d可视为循环表),其原则为,先将r[l]赋给d[1],再从r[2] 记录开始分二路插入。
编写实现二路插入排序算法。
7、后序遍历最后访问根结点,即在递归算法中,根是压在栈底的。
采用后序非递归算法,栈中存放二叉树结点的指针,当访问到某结点时,栈中所有元素均为该结点的祖先。
本题要找p和q 的最近共同祖先结点r ,不失一般性,设p在q的左边。
后序遍历必然先遍历到结点p,栈中元素均为p的祖先。
将栈拷入另一辅助栈中。
再继续遍历到结点q时,将栈中元素从栈顶开始逐个到辅助栈中去匹配,第一个匹配(即相等)的元素就是结点p 和q的最近公共祖先。
typedef struct{BiTree t;int tag;//tag=0 表示结点的左子女已被访问,tag=1表示结点的右子女已被访问}stack;stack s[],s1[];//栈,容量够大BiTree Ancestor(BiTree ROOT,p,q,r)//求二叉树上结点p和q的最近的共同祖先结点r。
{top=0; bt=ROOT;while(bt!=null ||top>0){while(bt!=null && bt!=p && bt!=q) //结点入栈{s[++top].t=bt; s[top].tag=0; bt=bt->lchild;} //沿左分枝向下if(bt==p) //不失一般性,假定p在q的左侧,遇结点p时,栈中元素均为p的祖先结点{for(i=1;i<=top;i++) s1[i]=s[i]; top1=top; }//将栈s的元素转入辅助栈s1 保存if(bt==q) //找到q 结点。
for(i=top;i>0;i--)//;将栈中元素的树结点到s1去匹配{pp=s[i].t;for (j=top1;j>0;j--)if(s1[j].t==pp) {printf(“p 和q的最近共同的祖先已找到”);return (pp);}}while(top!=0 && s[top].tag==1) top--; //退栈if (top!=0){s[top].tag=1;bt=s[top].t->rchild;} //沿右分枝向下遍历}//结束while(bt!=null ||top>0)return(null);//q、p无公共祖先}//结束Ancestor8、假设K1,…,Kn是n个关键词,试解答:试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,K2,…,Kn 时,用算法建立一棵以LLINK / RLINK 链接表示的二叉查找树。