c语言编程竞赛训练试题参考答案_第1页
c语言编程竞赛训练试题参考答案_第2页
c语言编程竞赛训练试题参考答案_第3页
c语言编程竞赛训练试题参考答案_第4页
c语言编程竞赛训练试题参考答案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C/C+语言编程竞赛训练题(部分) 1.编辑工具一般都具有字符串“查找”功能,试编程实现字符串的查找并统计 匹配的次数。 要求如下: (1) 查找字符串以逗号为分隔符,若遇逗号,则从逗号后的字符重新开始查 找; (2) 区分字母大小写; (3) 能支持通配符“?“ 和“*“查找,其中“ ?“可表示任意 1 个字符(为含空字符) , “*“代表任意 N 个字符(N0) 。 输入描述:首先输入要查找的字符串个数 M,接着输入 M 个要查找的字符串,每 个字符串占一行,最后是被查找的文本。 输出描述:要求分行输出每个字符串在文中出现的次数。 运行后若输入: 3 A D a D,abb,DccABV,AAAAABB,accc,Dabc 则结果输出为: 4 3 2 参考答案: #include “iostream.h“ #include “string.h“ char* Strstr(char s,const char sub)/自定义 /s串中查找是否有sub子串内容,找到返回其起始位置,sub允许含?通配符,不允许含 * char *p;int i=0,j=0,k=0;/abbbcdefbcde bb?f/abbbcdefbcde ?fvr if(strlen(sub)strlen(s)return NULL;/若子串更长则退出 while(subi=?)i+,k+;/跳过子串前导? if(subi=0)return s;/若已经匹配返回其位置 if(p=strchr(s+k,subi)=NULL)return NULL;/若不含子串字符则退 出 while(pj=subi|subi=?)/有 效字符开始匹配 if(subi=0)return p-k;/若匹配返回其位置 else return Strstr(p-k+1,sub);/否则从其下一位置查找是否有匹配位置 int Search(const char s,const char sub)/在s串中查找sub子串 出现次数 char *p,t80,s080;int n=0; strcpy(t,s);strcpy(s0,sub);/备份文本,abbbcdefbcde bb*fvr? if(p=strstr(s0,“*“)!=NULL)/含*情况(不考虑同时含?) *p=0;return strstr(t,s0)!=NULL;/含或不含?情况 while(p=Strstr(t,s0)!=NULL)n+;strcpy(t,p+strlen(s0); return n; int Sch(const char s,const char sub) /abcde0defg,abcde bcd char *p,t80;strcpy(t,s);/备份文本到t if(p=strstr(t,“,“)!=NULL)/判断文本中含逗号,若有则以此分界, *p=0;p+;return Search(t,sub)+Sch(p,sub);/逗号前部分匹配次数+ 逗号后部分匹配次数 else return Search(t,sub);/不含逗号直接返回匹配次数 void main() int n,i;char s80;char *p; cinn;cin.getline(s,80); p=new char*n; for(i=0;in) return s;s+=m/i; j=k; for(i=k-1;i0;i-) if (j+m/i-m/(i+1)1输出n,然后再计新字符 cout1)coutn;cin.getline(s,80); for(i=0;i #include “LinkList2.h“ void BInsA(int n,int m) LinkList A; int i,j,x; for(i=1;ix;A.InsElem(i,x);/输入表元素 for(j=1;jx; for(i=1;ix)A.InsElem(i,x);n+;break; if(in)A.InsElem(i,x);n+; A.DispList();/显示表 void main() int n,m; cinnm; while(ncinnm; 7.某电视台有一娱乐节目,主持人让观众猜商品的价格,若观众能在规定的时 间内猜中商品的价格即可获得该商品。例如,有一精美的水壶(假设实际价格为 282 元,事先观众不知道),观众只知道在市面上可能的价格范围为 100 到 400 元。此时若观众猜的价格为 300 元,主持人会告诉观众“大了” ;若观众猜的价 格为 200 元,主持人会告诉观众“小了” ;直到在规定的时间内观众猜中了商品 的价格。现请你编程模拟猜商品价格的过程,要求在最少的次数内猜中商品的 价格(精确到整数) 。 输入描述:先输入一个整数,表示要猜商品价格的次数,然后每行输入三个整数 B E R,B 和 E 表示观众估计的商品价格范围,R 表示实际商品价格。 输出描述:输出每种商品你所猜的价格。 运行后若输入: 2 100 400 282 1 20 15 则结果输出为: 250,325,287,268,277,282, 10,15, 请在/*【*/和/*】*/之间编写程序。 注意:不要删除或增加/*【*/和/*】*/。 /*源程序*/ /*【*/ /*】*/ 2 100 400 282 1 20 15 ;250,325,287,268,277,282, 10,15, ;10;10 1 2 4 3 7 2 8 5 0 9 ABabcdCeDF;2,4,2,8,0,1,3,7,5,9,A,B,C,D,F,a,b,c,d,e,;10;0 30;35;10;0 42;37;10;0 17;null;10;0 ;10;5;10;0 参考答案(C+): #include “iostream.h“ void CJ(int B,int E,int R) int m; while(Bn; for(i=0;iBER;CJ(B,E,R); 8.一群小朋友外出郊游,并分组做游戏。要求每组人数一致。现有 n 个小朋友, 有几种分法。 输入描述:输入正整数,代表小朋友的人数 n,以 0 结束。 输出描述:先要输出序号,然后输出分成几组,每组多少人,有多少种情况都要 输出。 运行后若输入: 5 6 0 则结果输出为: 5 能被分成 5 组、每组包含 1 人 6 能被分成 6 组、每组包含 1 人 6 能被分成 3 组、每组包含 2 人 6 能被分成 2 组、每组包含 3 人 请在/*【*/和/*】*/之间编写程序。 注意:不要删除或增加/*【*/和/*】*/。 /*源程序*/ /*【*/ /*】*/ 5 6 0 ;5 能被分成 5 组、每组包含 1 人 6 能被分成 6 组、每组包含 1 人 6 能被分成 3 组、每组包含 2 人 6 能被分成 2 组、每组包含 3 人 ;10;10 0;0;10;0 30;35;10;0 42;37;10;0 17;null;10;0 ;10;5;10;0 参考答案(C): #include “stdio.h“ void WS(int x) int i; for(i=x;i1;i-) if(x%i=0)printf(“%d能被分成%d组、每组包含%d人n“,x,i,x/i); void main() int x; scanf(“%d“, while(x)WS(x);scanf(“%d“, 9. 编写程序判断算术表达式的括号(大括号、方括号、圆括号三种)是否匹配。 输入描述:先输入一个整数 N,表示要判断的表达式个数,然后 N 行表达式。 输出描述:输出每种商品你所猜的价格。 运行后若输入: 2 (3+2)f/k (dk)fkk 则结果输出为: 匹配 不匹配 请在/*【*/和/*】*/之间编写程序。 注意:不要删除或增加/*【*/和/*】*/。 /*源程序*/ /*【*/ /*】*/ 1 (dk)fkk ;匹配;10;2 1 a(ddsdsd) ;匹配;10;4 1 sd) ;不匹配;10;4 42;37;10;0 17;null;10;0 ;10;5;10;0 参考答案(C+): #include #include “sqStack2.h“ int Match(char *str) int i=0;char c; sqStack S; while(c=stri+) switch(c) case:case:case(:S.Push(c);break; case:if(S.GetTop()=)S.Pop();else return 0;break; case:if(S.GetTop()=)S.Pop();else return 0;break; case):if(S.GetTop()=()S.Pop();else return 0; return S.Empty(); void main() int i,n;char s80; cinn; for(i=0;is; if(Match(s)cout #include “sqStack2.h“ int DX(char x)return x=AsqStackt; while(!p.Empty() x=p.Pop();if(TJ(x)t.Push(x);else q.Push(x); while(!t.Empty()p.Push(t.Pop(); while(!p.Empty()q.Push(p.Pop(); void main() sqStack a,b;int x;/1 2 3 4 5 6 8 7 9 0 aABbCcDEde for(int j=0;jx;a.Push(x); Filter(a,b,OS); while(!b.Empty()cout s,r;char c; for(int i=0;ic;s.Push(c); Filter(s,r,DX); while(!r.Empty()coutr.Pop()“,“; 特别说明: 若要使用数据结构相关内容,可以添加 include 语句将相关头文件包含到 程序中(也可以自己定义数据结构相关头文件),具体内容如下。 C描述顺序堆栈头文件sqStack.h,定义的数据元素存于 data 、栈顶指针存 于top、函数原型如下: void InitStack(sqStack *S);/*初始化栈*/ int Empty(sqStack *S);/*判栈空*/ int Full(sqStack *S);/*判栈满*/ int Push(sqStack *S,ElemType x);/*入栈*/ int Pop(sqStack *S,ElemType *x);/*出栈*/ int GetTop(sqStack *S,ElemType *x);/*取栈顶元素*/ C描述单链表头文件LinkList.h,定义的数据元素存于data、下一结点指针存 于next、函数原型如下: LNode *InitList();/*初始化带头结点单链表*/ int GetLen(LinkList L);/*求线性表长度*/ LNode *GetElem(LinkList L,int i);/*取第i个元素地址,i=1n*/ int Locate(LinkList L,ElemType x);/*查找值为x元素位置(1n),没找到返回0*/ int InsElem(LinkList L,int i,ElemType x);/*第i位置插入元素 x,i=1n*/ int InsNode(LinkList L,int i,LNode *s);/*第i位置插入结点x,i=1n*/ int DelElem(LinkList L,int i);/*删除线性表中第i个位置上的元素*/ void DispList(LinkList L);/*链表元素输出*/ C描述顺序表头文件sqList.h,定义的数据元素存于 data 、长度存于 Length、函数原型如下: void InitList(sqList *L);/*初始化线性表*/ int GetLen(sqList *L); /*求线性表长度*/ ElemType GetElem(sqList *L,int i);/*求线性表第i个元素的值,i=1n*/ int Locate(sqList *L,ElemType x);/*查找值为x元素的位置 (1n),没找到返回0*/ int InsElem(sqList *L,int i,ElemType x);/*第i位置插入元素x,i=1n*/ int DelElem(sqList *L,int i);/*删除线性表中第i个位置上的元素*/ void DispList(sqList *L);/*顺序表元素输出*/ C+描述顺序堆栈头文件sqStack2.h,定义sqStack类的数据元素存于data 、 栈顶指针存于top、成员函数原型如下: int Empty();/判栈空 int Full();/判栈满 int Push(ElemType x)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论