程序练习题一Word文件下载.docx
《程序练习题一Word文件下载.docx》由会员分享,可在线阅读,更多相关《程序练习题一Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
7描述:
矩阵中比上下两个数都大且比左右两个数都小或者比上下两个数都小且比左右两个数都大的数成为“鞍点”。
求输入的矩阵中鞍点的个数。
输入的第一行是两个整数m、n,代表矩阵有m行n列;
接下来的m行每行有n个正整数。
输出鞍点的个数。
格式是printf("
%d\n"
count);
34
1234
6587
4321
1
8描述:
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
一行字符
4个整型数据,abcd,分别表示其中英文字母、空格、数字和其他字符的个数
a1;
1111
注意要以换行结尾。
9描述:
给出一个数N(2<
=N<
=10000),判定它是否为素数。
素数:
一个大于等于2的数,除了1和它本身,再没有其他的整数能将其整除的数叫素数。
从标准输入输入一个整数。
若给定数为素数,向标准输出输出“Yes”,否则,输出“No”。
997
Yes
从2开始,到N-1,对N进行试除,若存在某个数能将N整除,说明N为非素数。
若不存在任何的整数能将其整除,说明N试素数。
10描述:
机器人面向x轴正方向站在原点。
当他接受到一个数字n时开始动作。
当n=-1时,机器人左转,
n=-2时,右转,
n>
0时,机器人前进n步。
n=0时,结束。
若干个整数,每个整数大于等于-2,小于100。
最后一个整数为0,代表输入结束。
(除最后一个整数,其他整数均不为0)
两个整数,每个一行,代表机器人最终的x坐标和y坐标。
-1
2
-2
11描述:
给定平面直角坐标系中的三个点的坐标,判断是否能构成直角三角形。
三个点的坐标,数据都在-100000到100000之间。
一个整数,当可以构成直角三角形的时候输出1,否则输出0。
00
30
08
输出语句:
printf("
1);
12描述:
设有N名同学手拉手围成一圈,自1、2、3、......开始编号,现从1号开始连续数数,
每数到M将此同学从圈中拉走,求最后被拉走的同学的编号
两个正整数,分别为N和M。
0<
N<
=100;
M<
65535
一个正整数,为最后被拉走的同学的编号,最后输出回车
10010
26
13描述:
给定一个字符串,全部由英文字母组成,要求把该字符串的中的大写字母改为小写,小写字母改为大写。
字符长度不超过20
一个长度不超过20的字符串
输出处理完后的字符串,最后输出回车
HelloWorld
hELLOwORLD
14描述:
从键盘输入4个字符串(长度小于20),存入二维字符串数组中。
然后对它们进行排序(假设由小到大顺序),最后输出排序后的4个字符串。
输入4个字符串(长度小于20),每个单独一行。
输出排序后的4个字符串,每个单独一行。
calrfeoiiojdsf
jdaoejffdsf
afxeezc
asdfeasdf
字符串比较可以用strcmp函数实现,排序方法可以是选择法或冒泡法。
15描述:
校验和是通过一定的算法扫描一个数据计算出的一个数值。
如果数据被改变了,则校验和也应该发生变化,这样就可以判断数据在传输过程中是否出现差错。
在这个问题中,你将实现一个称为Quicksum的校验和算法。
Quicksum算法计算由大写字母和空格组成的数据。
并且数据开始和结尾的空格不加入计算。
一个数据的Quicksum是每个字符的在数据中的位置乘以该字符的值。
空格值为0,字母的值就是其在字母表中的位置。
因此A=1,B=2,etc。
如下是"
ACM"
和"
MIDCENTRAL"
的Quicksum计算过程:
ACM:
1*1+2*3+3*13=46
MIDCENTRAL:
1*13+2*9+3*4+4*0+5*3+6*5+7*14+8*20+9*18+10*1+11*12=650
每个输入只包含一个数据,占一行,不会以空格开头结尾,长度不超过255字符。
对于每一个数据,输出其校验和,占一行。
REGIONALPROGRAMMINGCONTEST
4690
16描述:
一个字符串的D-pairs是字符串中相距D个字符的两个字符组成的字符串。
一个字符串是D-unique的,当且仅当它的所有的D-pairs都是不同的。
而一个字符串是surprising的,当且仅当对于所有可能的D,该字符串都是D-unique的。
以字符串ZGBG为例。
它的0-pairs有ZG,GB和BG。
既然它们各不相同,ZGBG就是0-unique的。
同样的,ZGBG的1-pairs是ZB和GG,因此它也是1-unique的。
ZGBG的2-pari只有ZG,是2-unique的。
对ZGBG不存在大于2的D-pairs,因此ZGBG是surprising的。
输入是一个仅含5个字符的字符串,占一行。
对于每个字符串,输出其是否是surprising的,一个一行。
例如对于字符串x,
若x是surprising的,则输出:
xissurprising.
若x不是surprising的,则输出:
xisNOTsurprising.
AABBA
AABBAisNOTsurprising.
17描述:
在二维直角平面坐标系内,存在n堆花生,一只猴子位于原点,猴子要按顺序拿到所有的花生,并回到原点。
猴子每次只能沿x或y方向移动一个单位。
一个整数n(0<
n<
100),接下来的n行,每行两个整数,代表每堆花生的坐标。
猴子走过的路程。
(printf("
d)输出)
4
11
1-1
-1-1
-11
10
所有坐标为整数。
18描述:
某个国家的身份证号码的构成具有如下规则:
所有的身份证号由18位字符组成,前17位均为数字0-9,最后一位可以是数字0-9或者大写字母'
Y'
。
身份证号的最后一位可以由前17位计算得出,计算方法是:
第一位数字*1+第二位数字*2+……+第十七位数字*17,最后一位就是累加和对11取模的结果(除以11后得到的余数),余数10用'
表示。
一行字符,长度等于18。
若输入的字符串符合上述身份证号的构成规则,就输出“Yes”,否则输出“No”。
(结果输出后要输出回车)
610105************
19描述:
两个整数a和b,如果a的因子和等于b,b的因子和也等于a,且a不等于b,则称a,b为一对亲密数。
找出满足a<
=10000且b<
=10000的全部亲密数对。
本题无输入。
升序输出所有满足条件的数对,每对数字一行,小数在前,用空格分隔。
无
20描述:
编制函数fun,其功能是删除一个字符串中指定的字符。
要求原始字符串在主函数中输入,处理后的字符串在主函数中输出。
第一行:
一个字符串,可能包含空格和其他字符,长度不超过100。
第二行:
一个字符。
处理后的字符串
abc
b
ac
第十届西工大ACM程序设计校选拔题(21——28)
21.描述:
页码问题
通常程序设计书籍的页码从自然数1开始顺序编码直到自然数n。
书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。
例如,第6页用数字6表示,而不是06或006等。
请问给定书的总页码n,书的全部页码中分别用到多少次数字0,1,2,…,9。
表示书的总页码的整数n(1<
=n<
=1000)。
输出共有10行,在第k行输出页码中用到数字k-1的次数,k=1,2,…,10。
11
22.升序字符串编码
描述:
给定的字母表A由26个小写英文字母组成A={a,b,…,z}。
该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。
例如,a,b,ab,bc,xyz等字符串都是升序字符串。
现在对字母表A产生的所有升序字符串按照字典序排列并编码如下:
<
pre>
1
2
…
26
27
28
…
a
b
z
ab
ac
/pre>
对于任意长度不超过6的升序字符串,计算出它在上述字典中的编码。
长度不超过6的升序字符串
字符串的编码。
ab
27
23.最多约数问题
正整数x的约数是能整除x的正整数。
正整数x的约数个数记为div(x)。
例如,1,2,5,10都是正整数10的约数,共4个,则div(10)=4。
设a和b是两个正整数(1<
=a<
=b),找出a和b之间约数个数最多的数x的div(x)。
两个正整数a,b
a和b之间约数个数最多的数x的div(x)
136
9
24.众数问题
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。
多重集S中重数最大的元素称为众数。
例如,S={1,2,2,2,3,5}。
多重集S的众数是2,其重数为3。
对于给定的由n个自然数组成的多重集S,编程计算S的众数的重数。
第1行多重集S中元素个数n(n<
=1000000)。
接下来的n行中,每行有一个自然数m(m<
=100000)。
输出众数的重数。
6
1
2
3
5
3
25.天平称球
已知有n个外观一样的球,其中的n-1个一样重,1个偏重,求最少使用天平称几次才能够找出那个偏重的球?
(假设天平没有砝码)
一个正整数n(2<
=1000000),表示球的总个数
最少称的次数
27.打台球
球台水平方向长为a,垂直方向长为b,将一个台球放在球台中心O,以与a边夹角为A(0<
=A<
=90)的角度击出,与垂直方向的边碰撞m次,与水平方次碰撞n次后又第一次回到中心O点,总共历时s。
其中a,b,s,m,n已知,请问夹角A以及球的平均速度为多少?
(假设球在运动过程以及碰撞时没有能量损失,台球本身可视为一个点)
+-----+
|
|
b|
O
a
5个正整数a,b,s,m,n
double型数A以及平均速度,保留小数点后两位。
100100111
45.00141.42
27.判断生日相同的概率
如果某班有n个同学,求在这n个同学中至少存在有两人同一天生日的概率是多少?
假定一年有365天,且不考虑闰年的情况。
输入两个数,第一个为该班级有多少位同学stu_num,第二个为总共进行多少组测试test_num。
输出用随机算法求出的概率,保留到小数点后两位。
50100000
0.97
可定义一大小为365的的数组birthday[365],并初始化为0。
然后每次产生一个整型随机数rand_num(0=<
rand_num<
365),如果birthday[rand_num]等于0,则将其置为1,如果birthday[rand_num]已经为1,则记录下这次测试为至少有两位同学的生日相同。
如果在生成完n个随机数后还没有两个同学生日相同则不予记录。
如此进行test_num次测试后统计出共有多少次测试至少有两位同学生日相同,从而得到相应概率。
随机投点求圆周率PI的标准程序
#include<
stdio.h>
stdlib.h>
intmain()
{
doublex,y;
longcount=0,n=1000;
longi;
for(i=0;
i<
n;
i++)
{
x=1.0*rand()/RAND_MAX;
y=1.0*rand()/RAND_MAX;
if(x*x+y*y<
1)
count++;
28.CORNFIELD
FJ有一大块土地,他希望在这片土地上找到一片最平坦的小块地方种植最好品种的玉米。
给定一个N*N(1<
=250)的矩阵,矩阵值表示土地海拔高度(0<
=高度<
=250,整数),给定整数B(1<
=B<
=N),K对坐标(xi,xj),
求由(xi,xj)为左上点,边长为B的正方形的方框内,最大数和最小数之差.
(0<
K<
100000;
另,1<
=xi<
=N-B,1<
=yi<
=N-B)
第1行:
三个数字
N,B,K
第2--N+1行:
矩阵N*N
第N+1--N+K+1行:
点对xi,xj
K行输出
坐标(xi,xj)为左上点,边长为B的正方形的方框内,最大数和最小数之差.
531
51263
13527
72461
99865
06939
12
5
29.polygon
在一个周长为10000的圆上等距分布着n个点,即这n个点是一个正n边形的顶点。
现在要另加m个点到圆上,新加的m个点可以任意选择位置(可以与原有的点重合)。
然后将这n+m个点中的一些点延圆周移动,最终使n+m个点均匀分布,即在一个正n+m边形的顶点上。
输出最小总移动距离。
输入两个整数n,m。
(2≤n≤1000,1≤m≤1000).
输出最小总移动距离,保留4位小数。
sampleinput#121sampleinput#223sampleinput#331sampleinput#41010
sampleoutput#11666.6667sampleoutput#21000.0sampleoutput#31666.6667sampleoutput#40.0图对应前3个样例
30.stickgame
问题描述这是一个很古老的游戏。
用木棒在桌上拼出一个不成立的等式,移动且只移动一根木棒使得等式成立。
现在轮到你了。
任务从文件读入一个式子。
如果移动一根木棒可以使等式成立,则输出新的等式,否则输出No。
说明和限制式子中只会出现加号和减号(包括负号),并且有且仅有一个等号,不会出现括号、乘号或除号,也不会有++,--,+-或-+出现。
式子中不会出现10个或10个以上的连续数字。
你只能移动用来构成数字的木棒,不能移动构成运算符(+-=)的木棒,所以加号、减号、等号是不会改变的。
移动前后,木棒构成的数字必须严格与图2中的0~9相符。
修改前的等式中的数不会以0开头,但允许修改后的等式中的数以数字0开头。
读入一行字符串。
该串中包括一个以“#”字符结尾的式子(ASCII码35),式子中没有空格或其他分隔符。
输入数据严格符合逻辑。
字符串的长度小于等于1000。
可能有无解情况,但是如果有解,解唯一。
“#”字符后面可能会有一些与题目无关的字符。
输出仅一行。
如果有解,则输出正确的等式,格式与输入的格式相同(以“#”结尾,中间不能有分隔符,也不要加入多余字符)。
如果无解,则输出“No”(N大写,o小写)。
输入样例11+1=3#输入样例21+1=3+5#输入样例311+77=34#
输出样例11+1=2#输出样例2No输出样例317+17=34#
31.scale
给你一个等比天平,一个待称物体(重量为m),一些砝码。
砝码的重量为1,3,9,27,…,3^n,3^(n+1),…。
每种砝码都只有一个。
现在要求你把物体放在天平左盘,然后在两个盘中放入一些砝码,使得天平能够平衡。
输入一个整数m(1<
=m<
=100000000)。
输出两行。
第一行第一个数表示左盘放的砝码个数kl,后面跟kl个按升序排列的数,表示要放的砝码质量;
第二行和第一行类似,表示右盘放置砝码的情况。
如果有多解,则输出任何一个可行解即可。
Sampleinput1:
42Sampleoutput133927181
Sampleinput2:
30Sampleoutput202327
32.n皇后加强版
在一个n*n的小方格(如图所示)中放置2n个皇后,使得每行每列放且仅放两个皇后。
┌─┬─┬─┬─┐
│*│*│
│
│
├─┼─┼─┼─┤
│*│
│*│
│
│*│
│*│*│
└─┴─┴─┴─┘
求出所有的解。
行列数n。
所有可能的情况数。
(输出结果占一行)
90
num);
33.活动安排
Jack是一名nwpu的大一新生,对学校举办的各种活动都十分的好奇,想尽可能多的参加这些活动。
Npwu每天共有N项活动,其开始结束时间分别为B[i],E[i],(i=1,2,……N)
请问Jack一天最多能参加几项活动。
当然,Jack在同一时间内只能参加一项活动,即jack参加的活动时间上不能重叠,但时间为[t1,t2],[t2,t3]的两个活动是可以同时参加的。
第一行一个整数N(1<
=n<
=1000)表示活动总数。
接下来N行表示各活动的起始,结束时间0<
=B[i]<
E[i]<
24
一个整数表示Jack最多能参加的活动数目。
1011
23
810
02
输出提示:
%d\n,num"
);
34.子集
有一集合中有N个元素,每个元素均为自然数。
给定一个total,求满足条件的所有子集,子集中各元素之和应等于total。
第一行一个整数表示有N个元素。
第二行N个整数,表示集合里的每个元素。
第三行一个整数表示给定的total。
输出所有的子集。
每行输出一组可行的子集。
每个元素之间有一空格,元素按从小到大排序。
1234710
13
35.合并果子
在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。
多多决定把所有的果子合成一堆。
每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。
可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。
多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。
因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。
假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。
例如有3种果子,数目依次为1,2,9。
可以先将1、2堆合并,新堆数目为3,耗费体力为3。
接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。
所以多多总共耗费体力=3+12=15。
可以证明15为最小的体力耗费值。
输入包括两行,第一行是一个整数n(1<
=10000),表示果子的种类数。
第二行包含n个整数,用空格分隔,第i个整数ai(1<
=ai<
=20000)是第i种果子的数目。
输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。
输入数据保证这个值小于2的31次方。
129
15
36.城堡
以我们憨厚的USACO主人公农夫约翰(FarmerJohn)无法想象的运气,我们的农夫约翰在他生日那天收到了一份特别的礼物:
一张“幸运爱尔兰”(一种彩票)。
结果这张彩票让我们的农夫约翰获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡!
(RP...)
喜欢吹嘘的农