您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > XXXX软件专业人才设计与开发大赛 部分试题 (C语言本科组)
2010软件专业人才设计与开发大赛部分试题(C语言本科组)程序空题:(5+5+5+5+10=30)五题:voidf(intn){for(inti=2;in/2;i++){-----------(1)------------{printf(%d,i);n=n/i;}}if(n1)printf(%d\n,n);}第二题:char*p=abcdef;char*q=(char*)malloc(strlen(p)+1);for(inti=0,intlen=strlen(p);ilen-1;i++)q=p[i+1];q[len-1]=p[0];-----(2)----;printf(%s\n,q);第三题:intf(intm,intn){inta=1;intm1=m;-----(3)----a*=m1--;intb=1;while(n1)b*=n--;returna/b;}第四题:intf(intn){intN[4];for(inti=0;i4;i++){N[3-i]=n%10;----(4)----}for(i=0;i3;i++)for(intj=0;j3-i;j++)if(N[j]N[j+1]){intt=N[j+1];N[j+1]=N[j];N[j]=t;}intn_min=0;for(i=0;i4;i++)n_min=n_min*10+N;intn_max=0;for(i=3;i=0;i--)n_max=n_max*10+N;returnn_max-n_min;}第五题://m:持有5角币的人数//n:持有1元币的人数//返回:所有顺利完成购票过程的购票次序的种类数intf(intm,intn){if(mn)return0;if(n==0)return1;return___________(5)____________;}最后一题:编程题:1请完成设计文档(设计思路)2设计题只需完成这个函数:boolTestResolve(char*question,int*oper,char*answer){//等待考生完成}求二十四点://Calcu24.cpp:Definestheentrypointfortheconsoleapplication.//#includestdafx.h#includeconio.h#includestdlib.h#includetime.h#includemath.h#includestring.h/*从一副扑克牌中,任取4张。2-10按其点数计算(为了表示方便10用T表示),J,Q,K,A统一按1计算要求通过加减乘除四则运算得到数字24。本程序可以随机抽取纸牌,并用试探法求解。*/voidGivePuzzle(char*buf){charcard[]={'A','2','3','4','5','6','7','8','9','T','J','Q','K'};for(inti=0;i4;i++){buf=card[rand()%13];}}voidshuffle(char*buf){for(inti=0;i5;i++){intk=rand()%4;chart=buf[k];buf[k]=buf[0];buf[0]=t;}}intGetCardValue(intc){if(c=='T')return10;if(c='0'&&c='9')returnc-'0';return1;}charGetOper(intn){switch(n){case0:return'+';case1:return'-';case2:return'*';case3:return'/';}return'';}doubleMyCalcu(doubleop1,doubleop2,intoper){switch(oper){case0:returnop1+op2;case1:returnop1-op2;case2:returnop1*op2;case3:if(fabs(op2)0.0001)returnop1/op2;elsereturn100000;}return0;}voidMakeAnswer(char*answer,inttype,char*question,int*oper){charp[4][3];for(inti=0;i4;i++){if(question=='T')strcpy(p,10);elsesprintf(p,%c,question);}switch(type){case0:sprintf(answer,%s%c(%s%c(%s%c%s)),p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);break;case1:sprintf(answer,%s%c((%s%c%s)%c%s),p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);break;case2:sprintf(answer,(%s%c%s)%c(%s%c%s),p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);break;case3:sprintf(answer,((%s%c%s)%c%s)%c%s,p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);break;case4:sprintf(answer,(%s%c(%s%c%s))%c%s,p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);break;}}boolTestResolve(char*question,int*oper,char*answer){//等待考生完成}returntrue;//returnfalse;}/*采用随机试探法:就是通过随机数字产生加减乘除的组合,通过大量的测试来命中的解法提示:1.需要考虑用括号控制计算次序的问题比如:(10-4)*(3+A),实际上计算次序的数目是有限的:A*(B*(c*D))A*((B*C)*D)(A*B)*(C*D)((A*B)*C)*D(A*(B*C))*D2.需要考虑计算结果为分数的情况:(3+(3/7))*73.题目中牌的位置可以任意交换*/boolTryResolve(char*question,char*answer){intoper[3];//存储运算符,0:加法1:减法2:乘法3:除法for(inti=0;i1000*1000;i++){//打乱纸牌顺序shuffle(question);//随机产生运算符for(intj=0;j3;j++)oper[j]=rand()%4;if(TestResolve(question,oper,answer))returntrue;}returnfalse;}intmain(intargc,char*argv[]){//初始化随机种子srand((unsigned)time(NULL));charbuf1[4];//题目charbuf2[30];//解答printf(***************************\n);printf(计算24\n);printf(AJQK均按1计算,其它按牌点计算\n);printf(目标是:通过四则运算组合出结果:24\n);printf(***************************\n\n);for(;;){GivePuzzle(buf1);//出题printf(题目:);for(intj=0;j4;j++){if(buf1[j]=='T')//、、、、初始化buf1[];printf(10);elseprintf(%c,buf1[j]);}printf(\n按任意键参考答案...\n);getch();if(TryResolve(buf1,buf2))//解题{////printf(a\n);//for(inti=0;i17;i++)//printf(%c,buf2);printf(参考:%s\n,buf2);}elseprintf(可能是无解...\n);printf(按任意键出下一题目,x键退出...\n);if(getch()=='x')break;}return0;}
本文标题:XXXX软件专业人才设计与开发大赛 部分试题 (C语言本科组)
链接地址:https://www.777doc.com/doc-1015645 .html