ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:20.37KB ,
资源ID:11275145      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11275145.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机学院ACM程序设计竞赛题目.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机学院ACM程序设计竞赛题目.docx

1、计算机学院ACM程序设计竞赛题目2011年计算机学院程序设计竞赛题目比赛时间:2011.3.1 下午3:00 120分钟;比赛地点:计算机实验室206比赛要求:1、建立学院+年级+姓名为文件夹,将所编写的程序存放在文件夹中。2、根据题目要求设计求解问题的算法,写出解题的关键点,采用你所熟悉的语言实现算法并测试。注意程序变量命名规范化、程序行间要有合理的缩进。题目一 寻找大富翁Problem Description信阳市共有n个人,请找出该市的前m个大富翁。Input输入包含多组测试用例。每个用例首先包含2个整数n(0n=100000)和m(0m=10),其中: n为信阳市的人数,m为需要找出的

2、大富翁数,接下来一行输入市内n个人的财富值。n和m同时为0时表示输入结束。Output请输出信阳市前m个大富翁的财产数,财产多的排前面,如果大富翁不足m个,则全部输出,每组输出占一行。Sample Input3 12 5 -15 31 2 3 4 50 0Sample Output55 4 3题目二 xxx定律Problem Description对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。请计算需要经过几步才能将n变到1,具体可见样例。Input输入包含多组测试用例。每个用例包含一个整数n,当n为0 时表示输入结束。(1=n=1

3、0000)。Output对于每组测试用例请输出一个数,表示需要经过的步数,每组输出占一行。Sample Input310Sample Output50题目三 A + BProblem Description读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出。Input测试输入包含若干测试用例,每个测试用例占一行,格式为A + B =,相邻两字符串有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。Output对每个测试用例输出1行,即A+B的值。Sample Inputone + two =three four + five six

4、=zero seven + eight nine =zero + zero =Sample Output39096题目四 百岛湖Problem Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米,也不能大于1000米。当然,为了节省资金,只要求实现任意2个小岛之间有路通即可。其中桥的价格为

5、100元/米。Input输入包括多组数据。输入首先包括一个整数T(T = 200),代表有T组数据。每组数据首先是一个整数C(C = 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 = x, y = 1000的整数。Output每组输入数据输出一行,代表建桥的最小花费,结果保留一位小数。如果无法实现工程以达到全部畅通,输出”oh!”。Sample Input2210 1020 2031 12 21000 1000Sample Output1414.2oh!题目五 How many ways?Problem Description春天到了,校园里开满了花,姹紫嫣

6、红,非常美丽。葱头是个爱花的人,看着校花校草竞相开放,漫步校园,心情也变得舒畅。为了多看看这迷人的校园,葱头决定,每次上课都走不同的路线去教室,但是由于时间问题,每次只能经过k个地方,比方说,这次葱头决定经过2个地方,那他可以先去明德广场看看喷泉,再去教室,也可以先到体育场跑几圈,再到教室。他非常想知道,从A 点恰好经过k个点到达B点的方案数,当然这个数有可能非常大,所以你只要输出它模上1000的余数就可以了。你能帮帮他么? 你可决定了葱头一天能看多少校花哦。Input输入数据有多组,每组的第一行是2个整数 n,m(0 n = 20,m = 100) 表示校园内共有n个点,为了方便起见,点从0

7、到n-1编号,接着有m行,每行有两个整数 s,t (0=s,tn) 表示从s点能到t点,注意图是有向的。接着的一行是整数T,表示有T组询问(1=T=100),接下来的T行,每行有三个整数 A,B,k,表示问你从A 点到 B点恰好经过k个点的方案数 (k 20),可以走重复边。如果不存在这样的走法,则输出0。当n, m都为0的时候输入结束。Output计算每次询问的方案数,由于走法很多,输出其对1000取模的结果。Sample Input4 40 10 21 32 320 3 20 3 33 60 11 00 22 01 22 121 2 10 1 30 0Sample Output2013参考

8、答案代码A+BProblemDescription读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出。Input测试输入包含若干测试用例,每个测试用例占一行,格式为A+B=,相邻两字符串有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。Output对每个测试用例输出1行,即A+B的值。SampleInputone+two=threefour+fivesix=zeroseven+eightnine=zero+zero=SampleOutput39096*/#include#include#includestructInPutStrin

9、g charValue100; /每次输入的计算字符串 InPutString*Next; /指向下一个结构体的地址;intWordsToInt(char*Value) /单个单词转换为整数值if(strcmp(one,Value)=0)return1;elseif(strcmp(two,Value)=0)return2;elseif(strcmp(three,Value)=0)return3;elseif(strcmp(four,Value)=0)return4;elseif(strcmp(five,Value)=0)return5;elseif(strcmp(six,Value)=0)re

10、turn6;elseif(strcmp(seven,Value)=0)return7;elseif(strcmp(eight,Value)=0)return8;elseif(strcmp(nine,Value)=0)return9;elseif(strcmp(zero,Value)=0)return0;elsereturn0;intCharsToInt(char*Value) /整体字符串转换为整数值intReturnValue=0;inti,Pos0=0;charLeftNum10=0;charRightNum10=0;for(i=0;i0) /找到表明是两位数strncpy(LeftNum

11、,Value,Pos0);strncpy(RightNum,Value+Pos0+1,strlen(Value)-Pos0-1);ReturnValue=WordsToInt(LeftNum)*10+WordsToInt(RightNum); else /是一位数strcpy(LeftNum,Value);ReturnValue=WordsToInt(strcpy(LeftNum,Value);returnReturnValue;intSumValue(char*Value) /计算机字符串的值 charLeftValue100=0; /运算式左侧charRightValue100=0; /运

12、算式右侧 inti,Pos0,Pos1=0; for(i=0;iNext=NULL;strcpy(pTempInPutString-Value,InPut);if(NULL=pHeadInPutString) /头指针没有创建则新建的是头指针pHeadInPutString=pTempInPutString;pUsedInPutString=pHeadInPutString;else /头指针已经创建则建立的数据放在尾部pUsedInPutString-Next=pTempInPutString;pUsedInPutString=pUsedInPutString-Next;gets(InPut

13、);/计算数据/输出数据pUsedInPutString=pHeadInPutString;while(NULL!=pUsedInPutString)printf(%dn,SumValue(pUsedInPutString-Value);pTempInPutString=pUsedInPutString;pUsedInPutString=pUsedInPutString-Next;free(pTempInPutString);return0;位数对调:输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的数。例如:Input3bitnatruedata:234n=432要求每次输入多组数

14、据(与ACM竞赛类似),输入0时表示输入结束如:输入为:1234567890输出应该为:321654987解1.先确定输入数n是否三位数,即n99且n=999。2.位数对调:n=abccba=x百位数a=n整除100;十位数b=(n-a*100)整除10;个位数c=n除以10的余数;3得对调后的数:x=c*100+b*10+a*/#include#includestructNumberNode /结构体intNumberValue; /输入的数值NumberNode*Next; /指向下一个结构体的地址;/在解决复杂问题时可以采用分函数将问题化简分步求解。故建立分函数CalcNumber进行百

15、个位互换intCalcNumber(intNumber) /对三位数进行位调/return(Number%10)*100+(Number-(Number/100)*100)/10)*10+(Number/100); return(Number%10)*100+(Number/10)%10)*10+(Number/100); intmain(intargc,char*argv)intInNumber=0;NumberNode*pNumber=NULL; /链表头指针NumberNode*pTempNumber=NULL; /用来表示当前指针位置的链表指针/采用链表输入数据scanf(%d,&In

16、Number);while(InNumber!=0)&(InNumber=100)NumberNode*pTemp; /链表临时指针指向当前创建的结构体的地址pTemp=(NumberNode*)malloc(sizeof(NumberNode); /申请空间pTemp-Next=NULL;pTemp-NumberValue=InNumber;if(pNumber=NULL) /头指针为空,则将新建立的链表做为头指针pNumber=pTemp;pTempNumber=pNumber;else /若不为空,则将新建立的结构体地址加入到链表的尾部 /注意赋值的先后性pTempNumber是指向链表

17、当前位置的指针pTempNumber-Next=pTemp;pTempNumber=pTemp; scanf(%d,&InNumber); /采用链表输入数据/对结果运算并输出while(pNumber!=NULL)printf(%dn,CalcNumber(pNumber-NumberValue);pTempNumber=pNumber;pNumber=pNumber-Next;free(pTempNumber); /释放申请的空间此句不能掉否则会造成内存泄露 return0;寻找大富翁ProblemDescription信阳市共有n个人,请找出该市的前m个大富翁。Input输入包含多组测试

18、用例。每个用例首先包含2个整数n(0n=100000)和m(0m=10),其中:n为信阳市的人数,m为需要找出的大富翁数,接下来一行输入市内n个人的财富值。n和m同时为0时表示输入结束。Output请输出信阳市前m个大富翁的财产数,财产多的排前面,如果大富翁不足m个,则全部输出,每组输出占一行。SampleInput3125-1531234500SampleOutput5543*/#include#includestructMoneybags /富翁的结构体intValue; /富翁的金钱数Moneybags*Next; /指向下一个富翁结构体的地址;structGroupData /每组测试

19、用例的结构体intMoneybagsNumber; /输入的富翁数总个数nintCountMoneybagsNumber; /需要输出的前m个大富翁的数值mMoneybags*MoneybagsLinks; /指向当前的第一个富翁 GroupData*NextGroupData; /指向下一组数据;voidSortData(GroupData*pHeadGroup) /对数据进行排序 GroupData*pGroup=NULL; /当时使用的组数据指针 Moneybags*pMoneybagsTemp0=NULL; /临时使用的富翁数据指针 Moneybags*pMoneybagsTemp1=

20、NULL; /临时使用的富翁数据指针pGroup=pHeadGroup;inti,j,MaxValue=0;while(pGroup!=NULL) /数据组的循环i=pGroup-CountMoneybagsNumber;j=0;MaxValue=0;pMoneybagsTemp0=pGroup-MoneybagsLinks;while(NULL!=pMoneybagsTemp0) /冒泡排序的循环 此处使用冒泡排序MaxValue=pMoneybagsTemp0-Value;pMoneybagsTemp1=pMoneybagsTemp0-Next;while(NULL!=pMoneybags

21、Temp1)if(MaxValueValue) MaxValue=pMoneybagsTemp1-Value;pMoneybagsTemp1-Value=pMoneybagsTemp0-Value;pMoneybagsTemp0-Value=MaxValue;j+;pMoneybagsTemp1=pMoneybagsTemp1-Next;pMoneybagsTemp0=pMoneybagsTemp0-Next; pGroup=pGroup-NextGroupData; ;voidPrintData(GroupData*pHeadGroup) /对数据进行输出 GroupData*pGroupT

22、emp=NULL; /临时使用的组数据指针 GroupData*pGroup=NULL; /当时使用的组数据指针Moneybags*pMoneybagsTemp0=NULL; /临时使用的富翁数据指针Moneybags*pMoneybagsTemp1=NULL; /临时使用的富翁数据指针pGroup=pHeadGroup;inti,j=0;while(pGroup!=NULL)i=pGroup-CountMoneybagsNumber;j=0;pMoneybagsTemp0=pGroup-MoneybagsLinks;while(NULL!=pMoneybagsTemp0)if(jValue)

23、; pMoneybagsTemp1=pMoneybagsTemp0;pMoneybagsTemp0=pMoneybagsTemp0-Next; free(pMoneybagsTemp1);j+;printf(n);pGroupTemp=pGroup;pGroup=pGroup-NextGroupData; free(pGroupTemp); /释放申请的空间;intmain(intargc,char*argv)intn=0; /输入的富翁个数n的临时变量intm=0; /需要输出的富翁个数m的临时变量GroupData*pGroup=NULL; /当时使用的组数据指针GroupData*pHe

24、adGroup=NULL; /组数据的头指针/采用链表输入数据scanf(%d,&n);scanf(%d,&m);while(0!=n)&(0!=m) /n,m都不为0时GroupData*pGroupTemp; /链表临时指针指向当前创建的结构体的地址pGroupTemp=(GroupData*)malloc(sizeof(GroupData); /申请空间/赋初值pGroupTemp-MoneybagsNumber=n;pGroupTemp-CountMoneybagsNumber=m;pGroupTemp-NextGroupData=NULL;pGroupTemp-MoneybagsLinks=NULL;if(NULL=pHeadGroup) /头指针没有创建则新建的是头指针pHeadGroup=pGroupTemp;pGroup=pHeadGroup;else /头指针已经创建则建立的数据放在尾部pGroup-NextGroupData=pGroupTemp; pGroup=pGroup-NextGroupData;inti=0;intMoneyValue=0;Moneybags*pMoneybags=NULL; /当前正在使用的富翁数据指针Moneybags*pM

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1