程序设计竞赛试题和题解
计算机程序设计大赛竞赛题
![计算机程序设计大赛竞赛题](https://img.taocdn.com/s3/m/e3d98674f46527d3240ce032.png)
计算机程序设计大赛竞赛题□JS 竞赛题题目要求:用HTML + CSS + JavaScript制作一个前台页面(index.html)。
你可以使用纯JavaScript实现页面的动态效果,也可以使用JavaScript库,但最好是jQuery。
注:CSS、JavaScript要独立于html文件,单独保存为外部文件(如index.css、inde x.js)。
具体要求如下:1、设计一个有布局的界面,你可以使用tab或者tree形目录作为导航,但每级导航的内容不可存在于该文件(index.html)中,要放在另外的html文件里。
tree形目录作为导航的,要至少支持3级导航。
希望你能够把以下要求的实现作为某级导航的内容放在该级导航下。
该页面是你展示后续实现的门户,所以请尽量注意美观。
2、使用“题目要求”中提及的技术,实现一个4×4的拼图游戏。
在实现以下“基本要求”的前提下才可以实现后续的“扩展要求”。
“基本要求”务必全部实现,“扩展要求”请尽可能多地实现。
基本要求:1)格子内必须是图片而不是字符。
示例如图1。
图12)通过鼠标点击有图片的格子,将其移动到相邻的无图片的格子。
3)要有游戏功能控制按钮,如“开始”、“重来”等。
4)游戏成功完成后要有提示。
5)需要时请考虑JavaScript的执行效率。
6)游戏的CSS、JavaScript要独立于html文件,单独保存为外部文件。
扩展要求:1)必须考虑JavaScript的执行效率。
2)支持键盘方向键操作,即←↑↓→键的操作。
3)支持“计时”、“计步”玩法。
4)支持预定义好的几种矩阵(方阵)大小,甚至自定义的矩阵(方阵)大小,5×5、6×6等等。
5)支持不只1张拼图背景图片,甚至自定义的拼图背景图片。
6)支持智能拼图,即游戏初始时或游戏进行过程中,通过智能拼图功能完成余下步骤,当然,每一步的时间间隔要足以让肉眼辨别。
3、页面的美观度,布局的合理性,动态效果的流畅度也是评分的重点。
程序设计大赛试题及答案
![程序设计大赛试题及答案](https://img.taocdn.com/s3/m/49743456b14e852459fb572d.png)
试题1、数学黑洞(程序文件名maths.c/maths.cpp)【问题描述】任给一个4位正整数,其各位数位上的数字不全相同,将数字重新组合成一个最大的数与最小的数相减,重复这个过程,最多7步,必得6174。
对任给的4位正整数(各位数位上的数字不全相同),编程输出掉进黑洞的步数。
【输入】一行,一个4位正整数n(1000< n<9999)【输出】掉进黑洞的步数输入1234输出32、进制转换(程序文件名conver.c/conver.cpp)【问题描述】任给一个十进制整数n,及正整数m(m<=16且m≠10), 将n转换成m进制并输出。
【输入】一行,两个整数n,m(0 ≤ n ≤ 500000,2 ≤ m ≤ 16,且m≠10),中间用一个空格隔开,其中n 表示十进制数。
【输出】转换后的数【输入输出样例】输入255 8输出3773、分数线划定(程序文件名score.c/score.cpp)【问题描述】公务员选拔工作正在 A 市如火如荼的进行。
为了选拔优秀人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。
面试分数线根据计划录取人数的150%划定,即如果计划录取m名公务员,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
【输入】第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的人数。
输入数据保证m*150%向下取整后小于等于n。
第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。
数据保证选手的报名号各不相同。
大学程序设计大赛试题答案
![大学程序设计大赛试题答案](https://img.taocdn.com/s3/m/87fc13993086bceb19e8b8f67c1cfad6195fe9d8.png)
大学程序设计大赛试题答案一、选择题1. 在C++中,下列哪个关键字用于定义常量?A. staticB. volatileC. constD. mutable答案:C2. 以下关于Python中的列表(list)说法正确的是:A. 列表是不可变的序列类型。
B. 列表不支持添加元素。
C. 列表可以包含不同类型的元素。
D. 列表的元素不能被删除。
答案:C3. 在Java中,关于异常处理的描述,以下哪项是正确的?A. try块中必须跟catch块。
B. catch块可以捕获所有类型的异常。
C. finally块可以用于执行清理操作,无论是否发生异常都会执行。
D. throw关键字用于声明一个可能抛出的异常类型。
答案:C4. 以下关于数据库事务的描述,哪项是错误的?A. 事务具有原子性。
B. 事务具有一致性。
C. 事务具有隔离性。
D. 事务不具备持久性。
答案:D5. 在HTML5中,用于创建交互式内容的标签是:A. <canvas>B. <svg>C. <iframe>D. <audio>答案:A二、填空题1. 在JavaScript中,可以使用________函数来获取字符串的长度。
答案:length2. 在Python中,使用________关键字可以遍历字典中的所有键。
答案:keys()3. SQL语句中,用于删除表中所有记录但保留表结构的命令是________。
答案:TRUNCATE TABLE4. 在C语言中,使用________关键字可以定义一个指针变量。
答案:*(星号)5. 正则表达式中,\d表示匹配一个________字符。
答案:数字三、编程题1. 题目描述:编写一个程序,输入一个整数n,输出n的阶乘。
C++代码示例:```cpp#include <iostream>using namespace std;int factorial(int n) {if (n <= 1) {return 1;} else {return n * factorial(n - 1);}}int main() {int n;cin >> n;cout << factorial(n) << endl;return 0;}```2. 题目描述:编写一个Python程序,实现一个简单的计算器,支持加、减、乘、除功能。
程序设计题库及答案详解
![程序设计题库及答案详解](https://img.taocdn.com/s3/m/7bf8315cbfd5b9f3f90f76c66137ee06eef94e6f.png)
程序设计题库及答案详解程序设计题库及答案详解是面向计算机科学与技术专业学生以及编程爱好者的一份重要学习资料。
它不仅包含了大量的编程题目,还提供了详细的解题思路和答案,帮助读者深入理解程序设计的原理和技巧。
# 一、基础题目1. 题目1:编写一个程序,实现两个整数的加法。
- 答案详解:首先定义两个整数变量,然后使用加法运算符将它们相加,并将结果存储在一个新变量中。
最后,输出结果。
2. 题目2:编写一个程序,实现字符串的反转。
- 答案详解:可以使用循环结构遍历字符串的每个字符,并将它们添加到一个新的字符串的开始位置。
完成后,输出反转后的字符串。
# 二、数组与循环3. 题目3:编写一个程序,找出数组中的最大值。
- 答案详解:首先初始化一个变量来存储最大值,然后使用循环遍历数组中的每个元素,并与当前最大值进行比较,如果当前元素更大,则更新最大值。
循环结束后,输出最大值。
4. 题目4:编写一个程序,实现数组的排序。
- 答案详解:可以使用冒泡排序或选择排序等算法。
以冒泡排序为例,通过多次遍历数组,比较相邻元素的大小,并在必要时交换它们的位置,直到整个数组有序。
# 三、函数与递归5. 题目5:编写一个函数,计算两个数的乘积。
- 答案详解:定义一个函数,接受两个参数,然后在函数内部使用乘法运算符计算它们的乘积,并返回结果。
6. 题目6:编写一个递归函数,计算阶乘。
- 答案详解:定义一个递归函数,如果输入的数为0或1,则返回1;否则,返回输入数乘以递归调用该函数的结果,输入数减1。
# 四、数据结构7. 题目7:编写一个程序,实现链表的插入操作。
- 答案详解:首先定义链表节点的结构,然后编写一个函数来创建新的节点。
在插入操作中,根据插入位置的不同,调整节点的指针指向。
8. 题目8:编写一个程序,实现二叉树的遍历。
- 答案详解:可以使用前序、中序或后序遍历。
以中序遍历为例,首先遍历左子树,然后访问根节点,最后遍历右子树。
程序设计竞赛试题和题解
![程序设计竞赛试题和题解](https://img.taocdn.com/s3/m/08a5d6c34028915f804dc2a4.png)
程序设计竞赛试题和题解付浩fuch@Contents完全平方数 (2)拉丁方阵 (3)取石子游戏 (5)乡村医院 (7)未知星球 (9)无聊的游戏 (10)最短路径 (12)完全平方数描述一个非负整数n是完全平方数当且仅当存在非负整数m,使得n=m2据说完全平方数具有某种神奇的力量,谁知道呢。
聪明的你一定想到了,这道题的任务就是编写一个程序,判断给定的n是否是完全平方数。
输入格式输入包含多组数据。
每组数据占一行,包含一个非负整数n,n不超过109输入以n=-1结束输出格式对每组输入数据输出一行,如果n是完全平方数则输出”Yes”,否则输出”No”输入样例1234-1输出样例YesYesNoNoYes解答一般的语言都有开平方运算吧?拉丁方阵描述拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,并且每种元素在一行和一列中恰好出现一次。
著名数学家和物理学家欧拉使用拉丁字母来作为拉丁方阵里元素的符号,拉丁方阵因此而得名。
例如下图是一个3×3的拉丁方阵:如果一个拉丁方阵的第一行和第一列按照元素的先后顺序来排列,那么这称为拉丁方阵的标准型,例如下图就是一个3x3的拉丁方阵标准型,第一行和第一列都是”1 2 3”。
你的任务是,编写一个程序读入一个方阵,判断其是否为拉丁方阵;进一步地,判断是否为标准型。
输入格式输入包含多组数据。
每组数据第一行为正整数n,表示方阵的大小。
其后n行,每行有n个1到n之间的整数,整数之间恰有一个空格,表示方阵的内容。
输入保证1≤n≤100输入以n=0结束,不要处理这个数据。
输出格式每组数据对应于一行输出。
如果输入是拉丁方阵,但不是标准型则输出1;如果输入是标准型则输出2;如果输入不是拉丁方阵则输出0输入样例21 12 233 2 12 1 31 3 231 2 33 2 12 1 254 35 2 15 4 1 3 21 52 4 32 13 5 43 24 15 31 2 32 3 13 1 2输出样例112解答按定义做判断。
c语言程序设计试题及答案解析
![c语言程序设计试题及答案解析](https://img.taocdn.com/s3/m/f4d9c0576d85ec3a87c24028915f804d2a168712.png)
c语言程序设计试题及答案解析C语言程序设计试题及答案解析一、选择题1. 下列哪个选项不是C语言的基本数据类型?A. intB. floatC. stringD. double答案:C2. C语言中,以下哪个运算符用于计算两个数的乘积?A. +B. -C. *D. /答案:C二、填空题1. 在C语言中,用于定义一个整型变量的关键字是______。
答案:int2. 若有以下C语言代码段:```cint a = 5, b = 10;printf("%d", a + b);```执行后输出的结果是______。
答案:15三、简答题1. 简述C语言中数组的定义和初始化方式。
答案:在C语言中,数组是一种基本的数据结构,用于存储具有相同类型的多个元素。
数组的定义方式为:类型名数组名[数组大小];初始化方式可以是静态初始化,即在定义时直接赋值,如:int arr[5] = {1, 2, 3, 4, 5}; 或者动态初始化,即在定义后使用循环或赋值语句逐一赋值。
四、编程题1. 编写一个C语言程序,实现求一个整数的阶乘。
```c#include <stdio.h>int factorial(int n) {if (n == 0)return 1;elsereturn n * factorial(n - 1);}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d 的阶乘是:%d\n", num, factorial(num));return 0;}```五、分析题1. 请分析以下C语言代码段的运行结果,并解释原因。
```c#include <stdio.h>int main() {int x = 10;printf("%d", x++);return 0;}```答案:代码段的运行结果是10。
全国青少年程序设计竞赛真题
![全国青少年程序设计竞赛真题](https://img.taocdn.com/s3/m/ba2c26903086bceb19e8b8f67c1cfad6185fe961.png)
全国青少年程序设计竞赛真题1. 设计一个程序,实现给定两个数的加减乘除运算。
程序需求:输入:两个浮点数 a 和 b;运算符 op(+、-、*、/)输出:根据运算符 op 进行相应的运算结果程序设计思路:首先,我们需要接收用户输入的两个浮点数 a 和 b,以及运算符 op。
然后,根据运算符进行相应的运算操作,并将结果输出。
程序设计:#include <stdio.h>int main(){float a, b;char op;printf("请输入第一个数:");scanf("%f", &a);printf("请输入第二个数:");scanf("%f", &b);printf("请输入运算符(+、-、*、/):");scanf(" %c", &op);switch(op){case '+':printf("两数相加的结果为: %.2f\n", a + b); break;case '-':printf("两数相减的结果为: %.2f\n", a - b); break;case '*':printf("两数相乘的结果为: %.2f\n", a * b); break;case '/':if(b != 0){printf("两数相除的结果为: %.2f\n", a / b); }else{printf("错误:除数不能为零!\n");}break;default:printf("错误:不支持的运算符!\n");break;}return 0;}2. 设计一个程序,找出一个整数数组中的最大值和最小值。
第六届程序设计比赛题目与答案
![第六届程序设计比赛题目与答案](https://img.taocdn.com/s3/m/c14aeebf900ef12d2af90242a8956bec0875a55b.png)
一、鸡兔同笼问题描绘一个笼子里面关了鸡和兔子〔鸡有2只脚,兔子有4只脚,没有例外〕。
已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物输入数据第1行是测试数据的组数n,后面跟着n行输入。
每组测试数据占1行,包括一个正整数a (a < 32768)。
输出要求n行,每行输出对应一个输入。
输出是两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用空格分开。
假如没有满足要求的情况出现,那么输出2个0。
输入样例2320输出样例0 05 10解题思路这个问题可以描绘成任给一个整数N,假如N是奇数,输出0 0,否那么假如N是4的倍数,输出N / 4 N / 2,假如N不是4的倍数,输出N/4+1 N/2。
这是一个一般的计算题,只要实现相应的判断和输出代码就可以了。
题目中说明了输入整数在一个比拟小的范围内,所以只需要考虑整数运算就可以了。
参考程序1.#include <stdio.h>2.void main( )3.{4.int nCases, i, nFeet; //nCases 表示输入测试数据的组数,nFeet表示输入的脚数。
5.scanf("%d", &nCases);6.for(i = 0; i < nCases; i++){7.scanf("%d", &nFeet);8.if(nFeet %2 != 0) // 假如有奇数只脚,那么输入不正确,9.// 因为不管2只还是4只,都是偶数10.printf("0 0\n");11.else if (nFeet%4 != 0) //假设要动物数目最少,使动物尽量有4只脚12.//假设要动物数目最多,使动物尽量有2只脚13.printf("%d %d\n", nFeet / 4 + 1, nFeet / 2);14.else printf("%d %d\n", nFeet / 4, nFeet / 2);15.}16.}二、判断闰年问题描绘判断某年是否是闰年。
大学生程序设计竞赛试题(正式赛)
![大学生程序设计竞赛试题(正式赛)](https://img.taocdn.com/s3/m/aa956a854b35eefdc8d333e0.png)
中原工学院第一届大学生程序设计竞赛正式比赛试题主办:中原工学院教务处学生处校团委计算机学院承办:中原工学院计算机学院地点:计算机学院实验中心406实验室时间:2010年4月11日考试时间:5小时(9:00 - 14:00)文件命名:提交源程序名为:题号_参赛选手编号.c或.cpp。
如1号选【试题一】兔子【题目描述】兔子具有很强的繁殖能力。
一对成年兔子每个月可以繁殖一对小兔子,而一对小兔子经过m个月之后,就会长成一对成年兔子。
通过分析,我们可以看出:若m=2的时候,每个月兔子的对数构成了一个Fibonacci数列。
但是,若m<>2,这个问题看起来就不那么简单了。
你的任务是计算:假定初始只有一对兔子,那么,经过d个月之后,共有多少对兔子?可以假定,在此阶段没有任何兔子死亡。
【输入】输入包括多组测试数据。
每组测试数据的一行中包括2个整数m(1<=m<=10),d(1<=d<=30)。
当测试数据遇到一行中有两个0时,即m=d=0,测试数据结束。
【输出】针对每组测试数据,在每一行输出经过d个月后共有多少对兔子。
【输入样例】2 33 50 0【输出样例】59【试题二】网页浏览器【题目描述】Mozilla Firefox是一个自由的,开放源码的网页浏览器,适用于Windows, Linux 和MacOS X等平台。
Firefox火狐校园大使是Mozilla开源社区项目的一部分,针对在校的高年级本科生和研究生以及众多技术爱好者,在校园中推广开源项目和开放技术,让更多的开发人员受益于Mozilla的开放技术和免费资源。
你很荣幸得到了这样一个机会,为Firefox编写一个重要的导航模块。
正如上图所示,导航模块要接受用户的后退、前进、进入用户输入的网址以及清空浏览记录等操作。
【输入】为了简化问题,用户所有的操作都以字符的形式从标准输入读入。
每一行描述一个操作,各操作的格式和功能如下所示:操作功能back 如果当前页面不是第一个页面,则跳到到前一个页面,并输出这个页面的网址forward 如果当前页面不是最后一个页面,则跳到到后一个页面,并输出这个页面的网址url 网址跳转到用户输入的网址(网址不含空格)clear 清空浏览记录(当前页面除外)exit 退出浏览器浏览器启动时默认进入中原工学院的主页”【输出】对于每一个需要输出网址的操作,输出对应的网址。
程序设计比赛专业组【正式赛】试题
![程序设计比赛专业组【正式赛】试题](https://img.taocdn.com/s3/m/852e87cb8bd63186bcebbcff.png)
T1猜素数游戏时间限制:1000 ms | 内存限制:65535 KB【问题描述】在世博园的梦想花园中,游客可利用手机等终端与梦想剧场内的虚拟人物Kr. Kong进行猜数比赛。
当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物。
例如:当屏幕出现22时,你的回答应是23;当屏幕出现8时,你的回答应是7;若X 本身是素数,则回答X;若最接近X的素数有两个时,则回答大于它的素数。
【标准输入】第一行:N 要竞猜的整数个数接下来有N行,每行有一个正整数X【标准输出】输出有N行,每行是对应X的最接近它的素数。
【约束条件】1≤N≤5 1≤X≤1000【T2 字母游戏时间限制:1000 ms | 内存限制:65535 KB【问题描述】peter喜欢玩字母游戏,于是他编写了一个有趣的游戏。
游戏规则是在一个 (N-1) * N 的表格里填写字母,规则:对于每个输入的N,由 (N-1) * N的字母区域的左上角开始,从字母A开始逆时针填充一个字母区域,乘积若超过26继续由新一组的A、B、C……填充,不要求输出边框。
【输入】多组测试数据(数据量在100组以内)。
每组测试数据只有一行为一个整数N(1<=N<=30),表示表格的宽度。
【输出】对于每组输入数据,输出N-1行,为填完的表格(N-1行,每行N个整数,每个数字之间用空格隔开)。
【样例输入】5【样例输出】代表一个4*5的顺时针旋转的字母区域,其样式如下:A B C D EN O P Q FM T S R GL K J I HT3 统计问题时间限制:1000 ms | 内存限制:65535 KB【问题描述】在一个充分大的棋盘上,我们做如下假设:1、每次只能移动一格;2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);3、走过的格子立即塌陷无法再走第二次;求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。
工信部程序设计大赛第二次模拟试题
![工信部程序设计大赛第二次模拟试题](https://img.taocdn.com/s3/m/2b3085cfa1c7aa00b52acb55.png)
工信部程序设计大赛第二次模拟试题一、超界。
问:使1+2+3+…+i>=4294967295成立的最小i值是几?注意:4294967295是32位无符号长整形数的最大值。
二、阶乘。
求N(N<1000)的阶层从右边开始数,第一个非零的数是几?这个数前面的数又是几?例如:12!= 435456000,则右边开始数第一个非零的数是6,6前面的数是5。
三、数学家。
一位学生(小于40岁)说“我的岁数的三次方是个四位数,四次方是个六位数。
要组成我岁数的三次方和四次方,需要用遍0~9十个数字。
”请问他多少岁?四、打印字母棱形。
如键盘上输入F,则屏幕上输出如下棱形:AA BA B CA B C DA B C D EA B C D E FA B C D EA B C DA B CA BA五、生日最近。
某班级的同学都是80年和81年出生的,他们的生日用字符串以如下方式表示:“80-09-30”。
为了简单起见,假设每个月都是30天。
给定几十个这样的生日字符串,放在一个二维字符数组中,求哪两个人的生日最接近,输出相差几天。
六、母串由一个子串重复n次得到。
给定一个字符串“abcdabcdabcdabcd”,它是由子串“abcd”重复四次得到的,也可以看成由子串“abcdabcd”重复两次得到的,此时要输出长的那个子串,即“abcdabcd”。
实在找不到重复2次或以上的情况,就输出字符串本身,表示它由自己重复1次得到。
七、单词排列。
给定的字符串中有多个单词组成,单词之间用一个空格分割,例如:“goes are bag egg apple god each big gag go bet ago”请将这个字符串中的单词按首字母的循序排列,如果首字母相同的单词之间不要求有顺序。
上述字符串处理的结果可以是如下:“are apple ago bag big bet egg each gag goes go god”设计一种尽量快速的方法。
c语言程序设计比赛试题及答案
![c语言程序设计比赛试题及答案](https://img.taocdn.com/s3/m/b59e0a7c640e52ea551810a6f524ccbff021ca10.png)
c语言程序设计比赛试题及答案一、选择题(每题2分,共20分)1. 下列哪个选项是C语言中的合法整数常量?A. 0x1AB. 01AC. 0b1010D. 1.23答案:A2. C语言中,哪个关键字用于定义一个函数?A. structB. intC. voidD. return答案:B3. 下列哪个选项是C语言中正确的注释方式?A. // 这是注释B. /* 这是注释 */C. //* 这是注释D. /* 这是注释答案:B4. C语言中,哪个运算符用于求两个数的和?A. +B. -C. *D. /答案:A5. 在C语言中,哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A6. C语言中,哪个关键字用于定义一个枚举类型?A. structB. unionC. enumD. typedef答案:C7. 下列哪个选项是C语言中合法的变量名?A. 2variableB. variable2C. _variableD. variable$2答案:B8. 在C语言中,哪个关键字用于定义一个指针?A. intB. floatC. charD. *答案:D9. C语言中,哪个函数用于将字符串复制到另一个字符串?A. strcpyB. strcatC. strcmpD. strlen答案:A10. 在C语言中,哪个函数用于计算字符串的长度?A. strcpyB. strcatC. strcmpD. strlen答案:D二、填空题(每题2分,共20分)1. C语言中,用于定义一个整型数组的关键字是________。
答案:int2. C语言中,用于定义一个字符型数组的关键字是________。
答案:char3. C语言中,用于定义一个浮点型数组的关键字是________。
答案:float4. C语言中,用于定义一个双精度浮点型数组的关键字是________。
答案:double5. C语言中,用于定义一个字符串的关键字是________。
C语言程序设计大赛题目
![C语言程序设计大赛题目](https://img.taocdn.com/s3/m/29816e76302b3169a45177232f60ddccda38e6d0.png)
C语言程序设计大赛题目C语言程序设计大赛题目Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-199981.角谷猜想日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。
猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。
请编程验证。
*问题分析与算法设计本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。
题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。
*程序说明与注释#include<>intmain(){intn,count=0;printf("Pleaseenternumber:");scanf("%d",&n);/*输入任一整数*/do{if(n%2){n=n*3+1;/*若为奇数,n乘3加1*/printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n);}elsen/=2;/*若为偶数n除以2*/printf("[%d]:%d/2=%d\n",++count,2*n,n);}}while(n!=1);/*n不等于1则继续以上过程*/}2.四方定理数论中着名的“四方定理”讲的是:所有自然数至多只要用四个数的平方和就可以表示。
请编程证此定理。
*问题分析与算法设计本题是一个定理,我们不去证明它而是编程序验证。
对四个变量采用试探的方法进行计算,满足要求时输出计算结果。
#include<>#include<>intmain(){intnumber,i,j,k,l;printf("Pleaseenteranumber=");scanf("%d",&number);/*输入整数*/for(i=1;i<="" p="">for(j=0;j<=i;j++)for(k=0;k<=j;k++)for(l=0;l<=k;l++)if(number==i*i+j*j+k*k+l*l)/*若满足定理要求则输出结果*/{printf("%d=%d*%d+%d*%d+%d*%d+%d*%d\n",number,i,i, j,j,k, k,l,l);exit(0);}3.验证尼科彻斯定理,即:任何一个整数的立方都可以写成一串连续奇数的和#include<>intmain(){inta,b,c,d;printf("Pleaseenteranumber:");scanf("%d",&a);/*输入整数*/b=a*a*a;/*求整数的三次方*/printf("%d*%d*%d=%d=",a,a,a,b);for(d=0,c=0;c<="">d+=a*a-a+1+c*2;/*求数列的前a项的和*/printf(c"+%d":"%d",a*a-a+1+c*2);}if(d==b)printf("Y\n");/*若条件满足则输出“Y”*/elseprintf("N\n");/*否则输出“N”*/}4.自动发牌一副扑克有52张牌,打桥牌时应将牌分给四个人。
程序设计比赛试题
![程序设计比赛试题](https://img.taocdn.com/s3/m/0d1b0f32360cba1aa911da57.png)
程序设计比赛试题最少钱币数:【问题描述】这是一个古老而又经典的问题。
用给定的几种钱币凑成某个钱数,一般而言有多种方式。
例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。
显然,最少需要2个钱币才能凑成15元。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。
【要求】【数据输入】输入可以有多个测试用例。
每个测试用例的第一行是待凑的钱数值M(1<=M<=2000,整数),接着的一行中,第一个整数K (1<=K<=10)表示币种个数,随后是K个互不相同的钱币面值Ki(1<=Ki<=1000)。
输入M=0时结束。
【数据输出】每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。
如果凑钱失败,输出“Impossible”。
你可以假设,每种待凑钱币的数量是无限多的。
【样例输入】156 2 5 10 20 50 10011 2【样例输出】2 ImpossibleFeli的生日礼物【问题描述】Felicia的生日是11月1日(和Kitty是同一天生的哦)。
于是Feli请来Kitty一起过生日。
Kitty带来了最新款的“Kitty猫”玩具准备送给Feli,不过她说,这份礼物可不是白送的。
Feli要帮她一个忙,才能够得到心仪已久的玩具。
Kitty说,“Kitty猫”玩具已经卖出了n!个,n<=10^100*_*,Kitty想知道确切的数字,而不是无聊的“一个数加个感叹号”。
Feli听了大吃一惊。
要知道,算出n!是一个无比艰巨的任务。
Feli告诉Kitty,就算Feli算出n!,Kitty也看不下去,因为当n=20时,计算机的长整型已经存不下了(Kitty只能接受1-9之间的数字)。
于是Kitty说,你只要告诉我n!最后一位非0的数就可以了。
第十三届山东icpc题解
![第十三届山东icpc题解](https://img.taocdn.com/s3/m/0fb99168bdd126fff705cc1755270722192e59d1.png)
第十三届山东ICPC题解2019年11月24日,第十三届山东省大学生程序设计竞赛(ICPC)在山东科技大学圆满落幕。
本次比赛共吸引了来自全省各高校的60支队伍参赛,考验了参赛队伍在算法和编程方面的能力。
以下是本次比赛的题目解析。
题目一:最大的数题目描述给定一个整数数组,你需要找到其中最大的数,并输出后缀为K位的最大数。
输入格式第一行输入一个整数N表示数组的长度。
第二行输入N个整数分别表示数组中的元素。
第三行输入一个整数K表示后缀的位数。
输出格式输出一个整数,表示后缀为K位的最大数。
样例输入51 2 3 4 52样例输出45解题思路我们可以遍历整个数组,将数组中的元素转换为字符串后截取后缀为K位的子字符串。
然后依次比较截取后的子字符串大小,找到最大的那个子字符串即可。
题目二:最小的字典序题目描述给定一个字符串S和一个整数K,你需要找到长度为K且字典序最小的子串。
输入格式第一行输入一个字符串S。
第二行输入一个整数K。
输出格式输出一个字符串,表示长度为K且字典序最小的子串。
样例输入banana3样例输出ana解题思路我们可以使用滑动窗口的思想来解决这个问题。
我们首先将窗口的左边界和右边界都设置为字符串的起始位置,然后我们逐步向右滑动窗口,检查窗口内的字符是否满足题目要求。
如果满足,我们记录当前窗口内的子串,并与之前记录的子串进行比较,更新最小字典序的子串。
最后,我们输出最小字典序的子串即可。
题目三:最小公倍数之和题目描述给定一个正整数N,求1到N之间所有数字的最小公倍数之和。
输入格式输入一个整数N。
输出格式输出一个整数,表示1到N之间所有数字的最小公倍数之和。
样例输入5样例输出60解题思路我们知道,两个数的最小公倍数等于它们之积除以它们的最大公约数。
因此,我们可以使用一个循环依次计算出1到N之间所有数字的最大公约数,并将最大公约数依次累加到结果中。
最后,我们返回结果即可。
总结本次第十三届山东ICPC题目涵盖了不同类型的题目,考验了参赛队伍在算法和编程方面的能力。
宁波市第25届中小学生程序设计竞赛初中组初赛试题和答案
![宁波市第25届中小学生程序设计竞赛初中组初赛试题和答案](https://img.taocdn.com/s3/m/ed01e62ce2bd960590c677ea.png)
初中组初赛试题一、选择题(每题1.5分,共30分。
每小题只有唯一一个答案)1、在宁波市中小学生程序设计比赛复赛(上机编程)时,以下不能使用的编程语言是:(A)Turbo Pascal (B)Free Pascal (C)C (D)C++ 2、在Free Pascal中按功能键F7或F4时,以下叙述正确的是:(A)F4逐条语句执行(包括子程序),F7运行至光标位置(B)F7逐条语句执行(包括子程序),F4运行至光标位置(C)F4逐条语句执行(不包括子程序),F7运行至光标位置(D)F7逐条语句执行(不包括子程序),F4运行至光标位置3、使用高级语言编写的程序称之为:(A)源程序(B)编辑程序(C)编译程序(D)链接程序4、如果自己的程序进入了死循环,应当按什么键终止?(A)Ctrl+C (B)Ctrl+D (C)Alt+C (D)Alt+D5、参加宁波市中小学生程序设计比赛复赛(上机编程)时,以下哪种行为是允许的?(A)访问互联网或局域网(B)使用U盘或光盘(C)使用自带的草稿纸(D)考试时发现机器有问题,举手示意监考人员处理6、参加宁波市中小学生程序设计比赛复赛(上机编程)时,你有一个程序被判0分。
你发现程序其实是正确的,但存在以下问题,提出申诉,以下哪个申诉会被接受?(A)源程序文件名和存放源程序的目录名错误(B)只是存放源程序的目录名错误,源程序文件名是正确的(C)存放源程序的目录名正确,源程序文件名是错误的(D)根据比赛规则,以上申斥都不会被接受7、在Free Pascal语言,以下关于各种数据类型占内存空间大小的描述错误的是:A每个integer型占2个字节 B每个longint型占4个字节C每个boolean型占2个字节D每个extended型占10个字节8、使用数组逐层保存完全二叉树结构,则以下叙述正确的是:(A)逻辑结构为完全二叉树,物理结构为数组(B)物理结构为完全二叉树,逻辑结构为数组(C)逻辑结构和物理结构均为完全二叉树(D)逻辑结构和物理结构均为数组9、关键码相同的二个元素,原来在排在前面的还能保证排在前面,这种排序算法我们称它是稳定的。
第七届蓝桥杯程序设计大赛题目及答案
![第七届蓝桥杯程序设计大赛题目及答案](https://img.taocdn.com/s3/m/d2ef3d277c1cfad6195fa7dc.png)
第七届省赛1. 网友年龄某君新认识一网友。
当问及年龄时,他的网友说:“我的年龄是个2 位数,我比儿子大27 岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”请你计算:网友的年龄一共有多少种可能情况?提示:30 岁就是其中一种可能哦.请填写表示可能情况的种数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
7x-y=32. 生日蜡烛某君从某年开始每年都举办一次生日party ,并且每次都要吹熄与年龄相同根数的蜡烛现在算起来,他一共吹熄了236 根蜡烛。
请问,他从多少岁开始过生日party 的?请填写他开始过生日party 的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
26 #include<iostream> using namespace std;int main(){int i,j;int sum=0; for(i=1;i<=100;i++){ // 年龄sum=0; for(j=i;j<=100;j++){ // 蜡烛数sum=sum+j;if(sum==236){ cout<<i<<endl;break;}}}}3. 方格填数如下的10 个格子填入0~9 的数字。
要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻) 一共有多少种可能的填数方案?请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
// 用dfs 求#include<iostream> #include<cstring> #include<cmath> using namespace std;const int maxn=4;int mp[maxn][maxn];int flag[10];int ans=0;int init() {memset(mp,-10, sizeof mp); memset(flag,0, sizeof flag);}int fx[4]= {0,-1,-1,-1},fy[4]= {-1,-1,0,1};int check(int i,int j) {for(int f=0; f<4; f++) {if(abs(mp[i][j]-mp[i+fx[f]][j+fy[f]])!=1||i+fx[f]<1||j+fy[f]>4||j+fy[f]<1 ) continue;elsereturn 0;}return 1;}void dfs(int i,int j) {if(i==3&&j==4) {ans++;return ;}for(int num=0; num<=9; num++) {if(!flag[num]) { mp[i][j]=num; flag[num]=1; if(check(i,j)) if(j==4) dfs(i+1,1);elsedfs(i,j+1); flag[num]=0;}}}int main() {init();dfs(1,2);cout<<ans;}// 暴力求解#include <iostream>using namespace std;int ans=0;void swap(int *a,int *b){int *c;c=a;a=b;b=c;}int f(int a[])// 判断这种排列组合是否符合题意{if(a[0]-a[4]==-1||a[0]-a[4]==1) return 0;if(a[3]-a[4]==-1||a[3]-a[4]==1) return 0;if(a[5]-a[4]==-1||a[5]-a[4]==1) return 0;if(a[7]-a[4]==-1||a[7]-a[4]==1)return 0;if(a[8]-a[4]==-1||a[8]-a[4]==1)return 0;if(a[9]-a[4]==-1||a[9]-a[4]==1)return 0;if(a[1]-a[4]==-1||a[1]-a[4]==1)return 0;if(a[1]-a[5]==-1||a[1]-a[5]==1)return 0;if(a[1]-a[6]==-1||a[1]-a[6]==1)return 0;if(a[0]-a[5]==-1||a[0]-a[5]==1)return 0;if(a[2]-a[5]==-1||a[2]-a[5]==1)return 0;if(a[8]-a[5]==-1||a[8]-a[5]==1)return 0;if(a[9]-a[5]==-1||a[9]-a[5]==1)return 0;if(a[6]-a[5]==-1||a[6]-a[5]==1)return 0;if(a[6]-a[9]==-1||a[6]-a[9]==1)return 0;if(a[6]-a[2]==-1||a[6]-a[2]==1)return 0;if(a[3]-a[0]==-1||a[3]-a[0]==1)return 0;if(a[3]-a[7]==-1||a[3]-a[7]==1)return 0;if(a[8]-a[7]==-1||a[8]-a[7]==1)return 0;if(a[8]-a[3]==-1||a[8]-a[3]==1)return 0;if(a[9]-a[8]==-1||a[9]-a[8]==1)return 0;if(a[1]-a[0]==-1||a[1]-a[0]==1)return 0;if(a[1]-a[2]==-1||a[1]-a[2]==1)return 0;}void perm(int a[],int m,int len)//列举出0-9 所有的组合进行判断{if(m==len-1){if(f(a)) ans++;return ;}for(int i=m;i<len;i++){swap(a[m],a[i]); perm(a,m+1,len); swap(a[m],a[i]);} } int main() {int a[10] = {0,1,2,3,4,5,6,7,8,9}; perm(a,0,10);cout<<ans<<endl; return 0;}4. 快速排序排序在各种场合经常被用到。
程序设计大赛试题及答案
![程序设计大赛试题及答案](https://img.taocdn.com/s3/m/45617a7802020740be1e9bb9.png)
试题1、数学黑洞(程序文件名maths.c/maths.cpp)【问题描述】任给一个4位正整数,其各位数位上的数字不全相同,将数字重新组合成一个最大的数与最小的数相减,重复这个过程,最多7步,必得6174。
对任给的4位正整数(各位数位上的数字不全相同),编程输出掉进黑洞的步数。
【输入】一行,一个4位正整数n(1000< n<9999)【输出】掉进黑洞的步数输入1234输出32、进制转换(程序文件名conver.c/conver.cpp)【问题描述】任给一个十进制整数n,及正整数m(m<=16且m≠10), 将n转换成m进制并输出。
【输入】一行,两个整数n,m(0 ≤ n ≤ 500000,2 ≤ m ≤ 16,且m≠10),中间用一个空格隔开,其中n 表示十进制数。
【输出】转换后的数【输入输出样例】输入255 8输出3773、分数线划定(程序文件名score.c/score.cpp)【问题描述】公务员选拔工作正在 A 市如火如荼的进行。
为了选拔优秀人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。
面试分数线根据计划录取人数的150%划定,即如果计划录取m名公务员,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
【输入】第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的人数。
输入数据保证m*150%向下取整后小于等于n。
第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。
数据保证选手的报名号各不相同。
编程竞赛知识试题题库及答案
![编程竞赛知识试题题库及答案](https://img.taocdn.com/s3/m/66d5b4b34bfe04a1b0717fd5360cba1aa8118ca8.png)
编程竞赛知识试题题库及答案一、选择题1. 在C++中,以下哪个关键字用于定义类?A. structB. classC. enumD. union答案:B2. 在Python中,以下哪个是正确的字典(dictionary)声明方式?A. dict = {1, 2, 3}B. dict = {1: 'one', 2: 'two'}C. dict = [1, 2, 3]D. dict = (1: 'one', 2: 'two')答案:B3. 以下哪个算法是用于排序的?A. 快速排序B. 深度优先搜索C. 广度优先搜索D. 二分查找答案:A4. 在JavaScript中,以下哪个是正确的函数声明?A. function myFunc() {}B. myFunc() {}C. var myFunc = function() {}D. All of the above答案:D5. 以下哪个是图的数据结构?A. 数组B. 链表C. 树D. 矩阵答案:C二、判断题1. 在Java中,所有的类都必须继承自Object类。
()答案:正确2. 在编程中,递归是一种常见的算法,它允许函数调用自身来解决问题。
()答案:正确3. 在C语言中,使用指针可以访问数组的元素。
()答案:正确4. 哈希表是一种基于数组的数据结构,它通过哈希函数将键映射到表中的位置。
()答案:正确5. 在编程中,全局变量可以在程序的任何地方被访问和修改。
()答案:正确三、简答题1. 请简述什么是栈(Stack)?答案:栈是一种遵循后进先出(LIFO)原则的数据结构,只允许在一端(栈顶)进行数据的添加和删除操作。
2. 请解释什么是递归算法,并给出一个简单的例子。
答案:递归算法是一种在函数中调用自身的算法。
例如,计算阶乘的函数可以递归地定义为:n的阶乘是n乘以(n-1)的阶乘,当n等于1时,阶乘为1。
程序设计大赛试题及答案
![程序设计大赛试题及答案](https://img.taocdn.com/s3/m/8a096c1b84868762cbaed501.png)
试题1、数学黑洞(程序文件名)【问题描述】任给一个4位正整数,其各位数位上的数字不全相同,将数字重新组合成一个最大的数与最小的数相减,重复这个过程,最多7步,必得6174。
对任给的4位正整数(各位数位上的数字不全相同),编程输出掉进黑洞的步数。
【输入】一行,一个4位正整数n(1000< n<9999)【输出】掉进黑洞的步数输入1234输出32、进制转换(程序文件名)【问题描述】任给一个十进制整数n,及正整数m(m<=16且m≠10), 将n转换成m进制并输出。
【输入】一行,两个整数n,m(0 ≤ n ≤ 500000,2 ≤ m ≤ 16,且m≠10),中间用一个空格隔开,其中n 表示十进制数。
【输出】转换后的数【输入输出样例】输入255 8输出3773、分数线划定(程序文件名)【问题描述】公务员选拔工作正在 A 市如火如荼的进行。
为了选拔优秀人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。
面试分数线根据计划录取人数的150%划定,即如果计划录取m名公务员,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
【输入】第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的人数。
输入数据保证m*150%向下取整后小于等于n。
第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。
数据保证选手的报名号各不相同。
【输出】第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计竞赛试题和题解付浩fuch@Contents完全平方数 (2)拉丁方阵 (3)取石子游戏 (5)乡村医院 (7)未知星球 (9)无聊的游戏 (10)最短路径 (12)完全平方数描述一个非负整数n是完全平方数当且仅当存在非负整数m,使得n=m2据说完全平方数具有某种神奇的力量,谁知道呢。
聪明的你一定想到了,这道题的任务就是编写一个程序,判断给定的n是否是完全平方数。
输入格式输入包含多组数据。
每组数据占一行,包含一个非负整数n,n不超过109输入以n=-1结束输出格式对每组输入数据输出一行,如果n是完全平方数则输出”Yes”,否则输出”No”输入样例1234-1输出样例YesYesNoNoYes解答一般的语言都有开平方运算吧?拉丁方阵描述拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,并且每种元素在一行和一列中恰好出现一次。
著名数学家和物理学家欧拉使用拉丁字母来作为拉丁方阵里元素的符号,拉丁方阵因此而得名。
例如下图是一个3×3的拉丁方阵:如果一个拉丁方阵的第一行和第一列按照元素的先后顺序来排列,那么这称为拉丁方阵的标准型,例如下图就是一个3x3的拉丁方阵标准型,第一行和第一列都是”1 2 3”。
你的任务是,编写一个程序读入一个方阵,判断其是否为拉丁方阵;进一步地,判断是否为标准型。
输入格式输入包含多组数据。
每组数据第一行为正整数n,表示方阵的大小。
其后n行,每行有n个1到n之间的整数,整数之间恰有一个空格,表示方阵的内容。
输入保证1≤n≤100输入以n=0结束,不要处理这个数据。
输出格式每组数据对应于一行输出。
如果输入是拉丁方阵,但不是标准型则输出1;如果输入是标准型则输出2;如果输入不是拉丁方阵则输出0输入样例21 12 233 2 12 1 31 3 231 2 33 2 12 1 254 35 2 15 4 1 3 21 52 4 32 13 5 43 24 15 31 2 32 3 13 1 2输出样例112解答按定义做判断。
取石子游戏描述在组合博弈论中,Nim游戏是一个非常经典的问题,Nim游戏可描述如下:有n堆石子,每堆石子数分别为a1, a2, …, a n (a i≥0)。
现有两人轮流从这n堆中取石子,每次必须从某一堆中取任意多的石子,至少要取一个,必须从同一堆中取石子,并且不能超过这一堆石子的总数。
如果某一方没有石子可取,那么他就输了。
例如有3堆石子,分别有3, 2, 2个,A和B两人轮流取。
A先从第2堆取1个,然后B从第1堆取3个,此时石子数分别为0, 1, 2A又从第3堆取1个,然后B从第1堆取1个,此时石子数分别为0, 0, 1A最后从第3堆取1个,此时所有石子都被取走,B无石子可取,所以B输了。
C. L. Bouton给出了Nim游戏的解法:考虑把每堆的石子数a1, a2, …, a n表示成二进制,那么当前游戏局面的Nim数为a1, a2, …, a n的按位异或。
比如在上面的例子中,3=11(2), 2=10(2), 2=10(2), 将这3个数按位异或得11(2)=3。
所以3是当前游戏局面的Nim数。
这里不加证明地给出结论:假设游戏双方都非常聪明,当Nim数为0时,当前游戏者必败;当Nim数不为0时,当前游戏者必胜。
再考虑上面的例子,A取走第2堆的1个石子后,石子数变为3, 1, 2,其Nim数为0,从而使得B 必败;此后A每次取石子后总能使得留给B的局面的Nim数为0,所以A最终取得了胜利。
既然你已经知道了如何判断当前Nim游戏局面是否必胜,那么请完成一个稍稍复杂些的任务:给定Nim游戏的当前局面,如果必胜,请找出当前游戏者需要取走多少石子才能让对方必败,如果有多种取石子的方式,请给出要取石子数最少的。
再如上面的例子,初始时,A从第1堆取3个石子,或从第2或3堆取1个石子都可以保证B必败,但因为后者所取的石子数最少,所以这种情况下答案为1。
输入格式输入包含多组数据。
每组数据第一行为n (1≤n≤106),表示石子的堆数。
第二行包含n个非负整数,表示每堆石子的数量,每堆石子不超过109个。
注意,可以有空的石子堆。
输入以n=0结束,不要处理这个数据。
对每组数据输出一行,为需要取走的最少的石子数,如果当前局面必败则输出-1输入样例110217 1733 2 241 2 3 4输出样例10-114解答记,如果那么输出-1;否则{|}为所求。
描述在一条笔直的公路上分布着n个村庄,为了节省开支,我们将挑选其中至多m个村庄修建医院。
各医院所在的村庄的村民可以在本村的医院接受服务,而其他村庄的村民则去最近的医院接受服务。
如果某村庄与多家医院的距离相同,可以任选一个医院。
为了减轻村民们的负担,我们希望让村民去医院所要行走的最远距离最小化。
为了方便描述,不妨设这条公路与X坐标轴重合,这样我们就可以用X坐标表示村庄的位置。
例如下图中有5个村庄,我们将挑选至多2个村庄修建医院,方格上端的数字表示坐标。
左图中村庄3和4中有医院,村庄1的村民需要行走2个单位距离才能到达最近的医院;右图村庄2和4中有医院,所有村民至多行走1个单位距离就能到达最近的医院。
事实上右图的方案就是最优的。
输入格式输入包含多组数据。
每组数据第一行为整数n和m,表示村庄的数量和医院数量的上限。
输入保证1≤m≤n≤20000第二行包含n个非负整数,表示每个村庄的坐标。
输入保证坐标严格递增,并且坐标的值不超过109输入以n=m=0结束,不要处理这组数据。
输出格式对每组输入数据输出一个整数,表示最小的最远距离。
输入样例5 20 1 2 5 63 31 2 44 12 3 4 50 0输出样例12解答首先二分查找最远距离R,然后贪心判断能否覆盖所有村庄。
描述fuch正在驾驶太空船探索一个未知的星球。
已知这个星球可以近似认为是个规则的球体,并且fuch的太空船正在赤道上空沿着规则的圆形轨道绕这个星球飞行。
通过一些采样测量,fuch获取到了这个星球赤道的高度信息。
采样数据共有n个,均匀覆盖了整个赤道,并且都是整数(因为太空船的计算机不支持浮点运算)。
fuch正打算降落,所以需要找一片平原。
fuch想从采样数据中找出最长的一段序列,使得这段序列对应的星球表面是平原。
如果一段序列的最大值和最小值之差不超过k,我们就可以认为是平原。
输入格式输入包含多组数据。
每组数据第一行包含两个整数n和k,含义如上所述。
(1≤n≤20000, 0≤k≤100)第二行包含n个非负整数,表示采样数据,不超过109输入以n=k=0结束,不要处理这组数据。
输出格式对每组输入数据输出最长的序列长度,使得其对应的星球表面是平原。
输入样例4 00 0 1 03 11 2 33 20 1 20 0输出样例323解答如果,那么使用简单的递推就能在内解决。
如果,从0到k枚举r,将序列所有数据加r再整除以k+1便可以转化为的情形。
描述ckf最近很无聊,所以他想出来一个无聊的游戏来打发时间。
ckf在纸上绘制了一副n×n的棋盘,左上角坐标为(1,1),右下角坐标为(n,n),开始时(1,1)位置有一颗棋子。
ckf有一个骰子,骰子有六个面,我们可以相信这个骰子是均匀的。
每一轮游戏中,ckf会掷两次骰子,设第一次的结果是a,第二次的结果是b,两次的结果都是1到6间的均匀分布,且相独立。
如果投掷骰子前棋子在(x,y)位置,那么ckf将把棋子移动到(x+a,y+b)。
ckf不断重复这一过程。
如果棋子被移出棋盘,即x>n或y>n,那么游戏结束。
ckf掷骰子的轮数就是他的得分。
ckf想知道,一场游戏中,他的得分的期望是多少?输入格式输入包含多组数据。
每组包含一个整数n,表示棋盘的大小 (1≤n≤400)输入以n=0结束,不要处理这组数据。
输出格式对每组输入数据输出得分的期望,四舍五入到小数点后2位。
输入样例1210100输出样例1.001.032.8427.58解答设为游戏过程中棋子会经过的概率,为棋子移动到时得分的期望。
则有:∑∑⁄∑∑由条件概率公式:∑ ( |)∑所以总分的期望为:∑∑∑∑∑所以只要计算出了和就能得出答案。
最短路径描述最短路径问题是图论中的经典问题。
在实际的应用中,最短路径问题还有各种各样的变型,这里需要你解决的就是其中一个:给定一个有向图G=(V,E),E中的每条边都有可正可负的权值,表示距离。
指定V中的两个顶u和w,请求出从u到w恰好含有k条边的最短路径。
注意,路径可以重复经过同一条边。
输入格式输入包含多组数据。
每组数据第一行包含三个整数, n, m, k,表示图中顶的数量,边的数量和最短路径的边数 (1≤n≤100, 0≤m≤n2, 1≤k≤109)第二行包含两个整数u和w,表示起点和终点的编号。
顶的编号在1到n之间。
其后m行,每行包含三个整数a, b, c,表示从编号为a的顶到编号为b的顶有一条权为c的边。
输入保证没有重边,c的绝对值不超过1000。
输入以n=m=k=0结束,不要处理这组数据。
输出格式对每组输入数据输出从u到w恰含k条边的最短路径长度,如果不存在这样的路径则输出”None”。
注意答案可能会超过32位整型的范围。
输入样例1 1 21 11 1 12 2 9999999991 21 2 10002 1 -1002 2 10000000001 11 2 10002 1 -1003 3 41 21 2 -12 3 13 1 13 3 51 21 2 -12 3 13 1 10 0 0输出样例2450000000100450000000000None解答考虑对含图的边权的邻接矩阵的乘法做修改:{ }设原图的邻接矩阵为A,那么A k中的第u行第w列即为答案。
不难看出这样定义的矩阵乘法仍满足结合律,所以可以利用快速幂的方法计算A k,时间复杂度。