软件专业人才设计与开发大赛 部分试题.doc_第1页
软件专业人才设计与开发大赛 部分试题.doc_第2页
软件专业人才设计与开发大赛 部分试题.doc_第3页
软件专业人才设计与开发大赛 部分试题.doc_第4页
软件专业人才设计与开发大赛 部分试题.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

2010软件专业人才设计与开发大赛 部分试题 (C语言本科组)程序空题:(5+5+5+5+10 = 30)五题:void f(int n) for(int i=2; i1) printf(%dn, n);第二题:char* p = abcdef;char* q = (char*)malloc(strlen(p)+1);for(int i=0, int len=strlen(p); i1) b *= n-; return a / b;第四题:int f(int n) int N4; for(int i=0; i4; i+) N3-i = n % 10; -(4)- for(i=0; i3; i+) for(int j=0; jNj+1) int t = Nj+1; Nj+1 = Nj; Nj = t; int n_min=0; for(i=0; i=0; i-) n_max = n_max * 10 + N; return n_max-n_min;第五题:/m: 持有5角币的人数/n: 持有1元币的人数/返回:所有顺利完成购票过程的购票次序的种类数int f(int m, int n) if(m n) return 0; if(n=0) return 1; return _(5)_;最后一题:编程题:1请完成设计文档(设计思路)2设计题只需完成这个函数:bool TestResolve(char* question, int* oper, char* answer) / 等待考生完成 求二十四点:/ Calcu24.cpp : Defines the entry point for the console application./#include stdafx.h#include conio.h#include stdlib.h#include time.h#include math.h#include string.h/* 从一副扑克牌中,任取4张。 2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按 1 计算 要求通过加减乘除四则运算得到数字 24。 本程序可以随机抽取纸牌,并用试探法求解。*/void GivePuzzle(char* buf) char card = A,2,3,4,5,6,7,8,9,T,J,Q,K; for(int i=0; i4; i+) buf = cardrand() % 13; void shuffle(char * buf) for(int i=0; i=0 & c0.0001) return op1 / op2; else return 100000; return 0;void MakeAnswer(char* answer, int type, char* question, int* oper) char p43; for(int i=0; i4; i+) if( question = T ) strcpy(p, 10); else sprintf(p, %c, question); switch(type) case 0: sprintf(answer, %s %c (%s %c (%s %c %s), p0, GetOper(oper0), p1, GetOper(oper1), p2, GetOper(oper2), p3); break; case 1: sprintf(answer, %s %c (%s %c %s) %c %s), p0, GetOper(oper0), p1, GetOper(oper1), p2, GetOper(oper2), p3); break; case 2: sprintf(answer, (%s %c %s) %c (%s %c %s), p0, GetOper(oper0), p1, GetOper(oper1), p2, GetOper(oper2), p3); break; case 3: sprintf(answer, (%s %c %s) %c %s) %c %s, p0, GetOper(oper0), p1, GetOper(oper1), p2, GetOper(oper2), p3); break; case 4: sprintf(answer, (%s %c (%s %c %s) %c %s, p0, GetOper(oper0), p1, GetOper(oper1), p2, GetOper(oper2), p3); break; bool TestResolve(char* question, int* oper, char* answer) / 等待考生完成return true; /return false;/* 采用随机试探法:就是通过随机数字产生 加减乘除的 组合,通过大量的测试来命中的解法 提示: 1. 需要考虑用括号控制计算次序的问题 比如:( 10 - 4 ) * ( 3 + A ), 实际上计算次序的数目是有限的: A*(B*(c*D) A*(B*C)*D) (A*B)*(C*D) (A*B)*C)*D (A*(B*C)*D 2. 需要考虑计算结果为分数的情况:( 3 + (3 / 7) ) * 7 3. 题目中牌的位置可以任意交换*/bool TryResolve(char* question, char* answer) int oper3; / 存储运算符,0:加法 1:减法 2:乘法 3:除法 for(int i=0; i1000 * 1000; i+) / 打乱纸牌顺序 shuffle(question); / 随机产生运算符 for(int j=0; j3; j+) operj = rand() % 4; if( TestResolve(question, oper, answer) ) return true; return false;int main(int argc, char* argv) / 初始化随机种子 srand( (unsigned)time( NULL ) ); char buf14; / 题目 char buf230; / 解答 printf(*n); printf(计算24n); printf(A J Q K 均按1计算,其它按牌点计算n); printf(目标是:通过四则运算组合出结果:24n); printf(*nn); for(;) GivePuzzle(buf1); / 出题 printf(题目:); for(int j=0; j4; j+) if( buf1j = T )/、初始化buf1; printf(10 ); else printf(%c , buf1j); printf(n按任意键参考答案.n); getch(); if( TryResolve(buf1, buf2) ) / 解题 / /printf(an)

温馨提示

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

评论

0/150

提交评论