ACM题库完整版ppt课件.ppt

上传人:小飞机 文档编号:2008046 上传时间:2022-12-31 格式:PPT 页数:45 大小:241KB
返回 下载 相关 举报
ACM题库完整版ppt课件.ppt_第1页
第1页 / 共45页
ACM题库完整版ppt课件.ppt_第2页
第2页 / 共45页
ACM题库完整版ppt课件.ppt_第3页
第3页 / 共45页
ACM题库完整版ppt课件.ppt_第4页
第4页 / 共45页
ACM题库完整版ppt课件.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《ACM题库完整版ppt课件.ppt》由会员分享,可在线阅读,更多相关《ACM题库完整版ppt课件.ppt(45页珍藏版)》请在三一办公上搜索。

1、二项式系数 1.题目描述二项式系数C(n, k)因它在组合数学中的重要性而被广泛地研究。二项式系数可以如下递归的定义:C(1, 0) = C(1, 1) = 1;C(n, 0) = 1对于所有n 0;C(n, k) = C(n ? 1, k ? 1) + C(n ? 1, k)对于所有0 k n。给出n和k,你要确定C(n, k)的奇偶性。 2.输入输入包含多组测试数据。每组测试数据一对整数n和k(0 k n 231),占据独立一行。文件结束符(EOF)表示输入结束。3.输出对每组测试数据,输出一行,包含一个“0” 或一个“1”,即C(n, k)除以2的余数。4.样例输入1 11 02 15.

2、样例输出110,#includeint fib(int n,int k)if(n=1,构造新的模运算1.题目描述给定整数a,b,n,要求计算(ab)mod n 2.输入多组数据,每组数据一行,为三个用空格隔开的整数a,b,n1=a=40,0=b=3,1=n=5003.输出每组数据输出一行,为所求值4.样例输入2 3 52 2 45.样例输出30,#include#includeint main() 答案有错int a,b,n;while(scanf(%d%d%dn,计算绩点1.题目描述学校对本科生的成绩施行平均学分绩点制(GPA)。将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。

3、 曾经使用的规定如下: 实际成绩 绩点 90-100 4.0 85-89 3.7 82-84 3.3 78-81 3.0 75-77 2.7 72-74 2.3 68-71 2.0 64-67 1.5 60-63 1.0 60以下 0 1一门课程的学分绩点=该课绩点*该课学分 2总评绩点=所有学科绩点之和/所有课程学分之和 现要求你编写程序求出某人A的总评绩点(GPA)。2.输入第一行 总的课程数n(n10); 第二行 相应课程的学分(两个学分间用空格隔开); 第三行 对应课程的实际得分; 此处输入的所有数字均为整数。3.输出输出有一行,总评绩点,精确到小数点后2位小数。(printf(%.2

4、f,GPA);)5.样例输入54 3 4 2 391 88 72 69 566.样例输出2.52,#include#includeint main() int n,i; float a10,c10,b10,sum=0,GPA,d; scanf(%d,将字符串中的小写字母转换成大写字母1.题目描述给定一个字符串,将其中所有的小写字母转换成大写字母 2.输入一个字符串3.输出将输入的字符串中所有小写字母转换成大写字母后的字符串4.样例输入helloworld123Ha5.样例输出HELLOWORLD123HA,#include#define N 100int main() int i;char c

5、,strN; gets(str);i=0;while(stri!=0)if(stri=a,日历问题 1.题目描述在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。2.输入输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是?1, 不必处理。可以假设结果的年份不会超过9999。3.输出对每个测试样

6、例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday 或 Saturday“。4.样例输入1730 1740 1750 1751 -15.样例输出2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday6.提示2000.1.1. 是星期六,#includeint type(int);char week7

7、10=saturday,sunday,monday,tuesday,wednesday,thursday,friday;int year2=365,366;int month212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31;int main(void)int days,dayofweek;int i=0,j=0;while(scanf(%d,求平均年龄1.题目描述班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位2.输入第一行有一个整数n(1= n =

8、100),表示学生的人数。其后n行每行有1个整数,取值为15到25。3.输出输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。4.样例输入218175.样例输出17.506.提示要输出浮点数、双精度数小数点后2位数字,可以用下面这种形式: printf(%.2f, num);,#includeint main() int n,i,sum,age; double num; scanf(%d,数制转换1.题目描述将十进制数转换成指定的进制数 2.输入第一行输入一个正整数n,表示需要转换的进制数第二行输入一个十进制正整数3.输出转换成n进制的数4.样例输入6905.样例输出230,

9、数的距离差 1.题目描述给定一组正整数,其中的最大值和最小值分别为max和min,其中的一个数x到max和min的距离差D定义为 abs(abs(x-max) - abs(x-min)。 其中,abs()表示求一个数的绝对值2.输入输入第一行为整数n,剩余n行每行一个正整数。3.输出输出仅一行,它的值为使得距离差D最小的x4.样例输入5317595.样例输出56.提示函数abs()定义在stdlib.h中,#include#include#define N 500int main()int aN,n,i,m,p,r,s,t;scanf(%d,登山1.题目描述五一到了,NUIST-ACM队组织大

10、家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?2.输入Line 1: N (2 = N = 1000) 景点数Line 2: N个整数,每个景点的海拔3.输出最多能浏览的景点数4.样例输入8186 186 150 200 160 130 197 2205.样例输出4,#includeint f(int a1000,int n);

11、int main()int n,a1000,i,m;scanf(%d,int f(int a1000,int n)int i,j=1,s,m,b1000;for(m=n;m0;m-)for(i=1;iai-1)j+;for(i=m-1;in-1;i+)if(aiai+1)j+;bn-m=j;j=1;s=b0;for(i=1;in;i+)if(sbi)s=bi;return s;,计算多项式的值1.题目描述多项式f(x) = ax3 + bx2 + cx + d 2.输入输入仅一行,分别是x,及参数a、b、c、d的值,每个数都是双精度浮点数。3.输出输出也仅一行,f(x)的值,保留小数点后7位。

12、4.样例输入2.31 1.2 2 2 35.样例输出33.08386926.提示使用printf(%.7lf, .)实现保留小数点后7位。,#includeint main()double x,a,b,c,d,y;scanf(%lf%lf%lf%lf%lf,计算两个分数的和 1.题目描述输入两个分数,形式如1/2,计算它们的和,以分数形式输出 2.输入第一行为第一个分数第二行为第二个分数3.输出两个分数的和4.样例输入1/23/45.样例输出5/4,#includeint main(void)int a,b,c,d,m,n,i=2;scanf(%d/%d,排序 1.题目描述按要求排序2.输入第

13、一行为一个整数N(1=N=1000)第二行为N个绝对值不超过10000的整数,表示需要排序的序列3.输出输出N行,为N个整数按升序排序后的序列4.样例输入6100 201 6 8 10 995.样例输出6 8 10 99 100 2016.提示这N个数需要随机产生,#include#define N 1000int main(void)int n,i,j,temp,aN;scanf(%d,日志排序 1.题目描述有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:“hs_10000_p”是计算任务的名称,“2007-01-17 19:22:53,315”是计算

14、任务开始执行的时间“年-月-日 时:分:秒,毫秒”, “253.035(s)”是计算任务消耗的时间(以秒计)hs_10000_p 2007-01-17 19:22:53,315 253.035(s)请你写一个程序,对日志中记录计算任务进行排序。时间消耗少的计算任务排在前面,时间消耗多的计算任务排在后面。如果两个计算任务消耗的时间相同,则将开始执行时间早的计算任务排在前面。2.输入日志中每个记录是一个字符串,每个字符串占一行。最后一行为空行,表示日志结束。日志中最多可能有10000条记录。计算任务名称的长度不超过10,开始执行时间的格式是YYYY-MM-DD HH:MM:SS,MMM,消耗时间小

15、数点后有三位数字。计算任务名称与任务开始时间、消耗时间之间以一个或多个空格隔开,行首和行尾可能有多余的空格。3.输出排序好的日志记录。每个记录的字符串各占一行。输入的格式与输入保持一致,输入包括几个空格,你的输出中也应该包含同样多的空格。4.样例输入hs_10000_p 2007-01-17 19:22:53,315 253.035(s)hs_10001_p 2007-01-17 19:22:53,315 253.846(s)hs_10002_m 2007-01-17 19:22:53,315 129.574(s)hs_10002_p 2007-01-17 19:22:53,315 262.5

16、31(s)hs_10003_m 2007-01-17 19:22:53,318 126.622(s)hs_10003_p 2007-01-17 19:22:53,318 136.962(s)hs_10005_m 2007-01-17 19:22:53,318 130.487(s)hs_10005_p 2007-01-17 19:22:53,318 253.035(s)hs_10006_m 2007-01-17 19:22:53,318 248.548(s)hs_10006_p 2007-01-17 19:25:23,367 3146.827(s)5.样例输出hs_10003_m 2007-01

17、-17 19:22:53,318 126.622(s)hs_10002_m 2007-01-17 19:22:53,315 129.574(s)hs_10005_m 2007-01-17 19:22:53,318 130.487(s)hs_10003_p 2007-01-17 19:22:53,318 136.962(s)hs_10006_m 2007-01-17 19:22:53,318 248.548(s)hs_10000_p 2007-01-17 19:22:53,315 253.035(s)hs_10005_p 2007-01-17 19:22:53,318 253.035(s)hs_

18、10001_p 2007-01-17 19:22:53,315 253.846(s)hs_10002_p 2007-01-17 19:22:53,315 262.531(s)hs_10006_p 2007-01-17 19:25:23,367 3146.827(s),数圈 1.题目描述以1为中心,用2,3,。,n的数字围绕着中心输出一个数圈,若n=47 8 9 106 1 2 115 4 3 1216 15 14 132.输入一个整数n(1=n=10)3.输出一个数圈4.样例输入55.样例输出21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5 4 3 1217 1

19、6 15 14 13,#include#define N 10int main() int numNN; int circle=2,row,column,n,i=1,j;/circle为每转半圈的数字个数 scanf(%d, ,circle+; j=1; while(j=circle-1) /*同上*/ if(circle%2) numcolumn-row=i+; else numcolumn+row=i+; j+; for(i=0;in;i+) for(j=0;jn;j+) printf(%3d,numij); printf(n); return 0;,细菌繁殖1.题目描述一种细菌的繁殖速度

20、是每天成倍增长。例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。 2.输入第一行有一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在长整数(long)范围内。3.输出对于每一组测试数据,输出一行,该行包含一个整数

21、,为要求的一天的细菌数。4.样例输入21 1 1 1 22 28 10 3 25.样例输出240,#includeint a12=31,28,31,30,31,30,31,31,30,31,30,31;int main(void)int n,i;scanf(%d,最长最短单词1.题目描述输入1行单词(不多于200个单词),空格和逗号都是单词间的间隔,试输出第1个最长的单词和第1个最短单词。如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。2.输入一行单词,空格和逗号都是单词间的间隔3.输出两行输出 第1行,第一个最长的单词 第2行,第一个最短的单词4.样例输入I am studyi

22、ng Programming language C in Nanjing University of Information and Technology5.样例输出ProgrammingI,#include#includeint main()char s200;int i=0,j=0,c=0,m=0,n=0,d=10;gets(s);while(si!=0) while(si!= ,while(sm!= ,Caesar 密码 1.题目描述Julius Caesar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是Caesar 军团中的一名军官,需要把Cae

23、sar 发送的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F),其他字符不变,并且消息原文的所有字母都是大写的。 密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U2.输入最多不超过100个数据集组成。每个数据集由3部分组成:起始行:START 密码消息:由1到200个字符组成一行,表示Caesar发出的一条消息结束

24、行:END 在最后一个数据集之后,是另一行:ENDOFINPUT3.输出4.样例输入STARTNS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJXENDSTARTN BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJENDSTARTIFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJENDENDOFINPUT5.样例输出IN WAR, EVENTS OF IMPORTAN

25、CE ARE THE RESULT OF TRIVIAL CAUSESI WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROMEDANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE,#include#includevoid decipher(char message);void main()char message201;gets(message);while(strcmp(message,START)=0)decipher(message);

26、printf(%sn,message);gets(message);return;void decipher(char message)char plain27=VWXYZABCDEFGHIJKLMNOPQRSTU;char cipherEnd201;int i,cipherLen;gets(message);cipherLen=strlen(message);for(i=0;i=A,N皇后问题 1.题目描述在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。

27、 2.输入共有若干行,每行一个正整数N13,表示棋盘和皇后的数量;如果N=0,表示结束。3.输出共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。4.样例输入18505.样例输出19210,大整数加法1.题目描述求两个不超过200位的非负整数的和。 2.输入有两行,每行是一个不超过200位的非负整数,没有多余的前导0。3.输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 4.样例输入22222222222222222222333333333333333333335.样例输出55555555555555555555,#include

28、#include#define MAX_LEN 200 是书上的 错误的int an1MAX_LEN+10;int an2MAX_LEN+10;char szLine1MAX_LEN+10;char szLine2MAX_LEN+10;int main()scanf(%s,szLine1);scanf(%s,szLine2);int i,j;memset(an1,0,sizeof(an1); memset(an1,0,sizeof(an2);int nLen1=strlen(szLine1);j=0;for(i=nLen1-1;i=0;i-)an1j+=szLine1i-0; int nLen

29、2=strlen(szLine2);j=0;for(i=nLen2-1;i=0;i-)an2j+=szLine2i-0;for(i=0;i=10)an1i-=10; an1i+1+;bool bStartOutput=false;for(i=MAX_LEN;i=0;i-)if(bStartOutput)printf(%d,an1i);else if(an1i)printf(%d,an1i); bStartOutput=true;return 0;,#includeint main() 王申豪版int base,num,count=0;int arr10;scanf(%d%d,第K个回文数1.题

30、目描述回文数是这样一个正整数:它从左往右读和从右往左读是一样的。例如1,111,121,505都是回文数。将1到1000内所有回文数按从小到达排序后,第k个回文数是多少呢? 2.输入第一行为一个整数N,表示询问的次数。以下N行每行一个整数k,表示询问第k个回文数是多少3.输出输出共N行,按照输入数据的顺序,依次输出第k个回文数。4.样例输入25105.样例输出511,#include#define M 1000 有问题int main(void)int i,j=0,n,m=0,aM; for(i=1;i0)m=m*10+i%10;i=i/10;if(m=n)aj=i;j+;int N,kM;s

31、canf(%d,计算约数的和 1.题目描述给你一个数字 求它的所有约数的和。比如12,约数有1,2,3,4,6,12 加起来是28现在给你一个数字I。 (1 = I = 1,000)2.输入一个数字I3.输出约数之和4.样例输入125.样例输出28,#includeint main ()int i,m,sum;scanf(%d,判断闰年1.题目描述判断某年是否是闰年。 2.输入输入只有一行,包含一个整数a(0 a 3000)3.输出一行,如果公元a年是闰年输出Y,否则输出N4.样例输入20065.样例输出N6.提示公历纪年法中,能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不

32、是闰年, 能被3200整除的也不是闰年,如1900年是平年,2000年是闰年,3200年不是闰年,#include int main() int a;scanf(%d, ,求出10个数的最大值 1.题目描述从键盘录入一组10个整型数据,找出值最大的数据,并输出 2.输入从键盘输入十个数,数据之间用空格分隔3.输出在屏幕上输出结果4.样例输入12 3 4 65 7 8 9 1 10 205.样例输出65,#includeint main() int a10,i; for(i=0;iai+1) ai+1=ai; printf(%d,ai); return 0;,整数求和 1.题目描述给定两个整数,

33、求它们之和 2.输入两个整数A,B.3.输出两个整数的和。4.样例输入1 25.样例输出36.提示如果对程序答题格式不清楚的,可以查看系统左上角菜单的FAQ,里面有本题的各种语言的样例解答.,#include int main() int a,b; scanf(%d %d, ,求最值 1.题目描述给定N个整数(1=N=100),求出这N个数中的最大值,最小值。2.输入多组数据,第一行为一个整数N,第二行为N个不超过100的正整数,用空格隔开。3.输出对每组数据输出一行,包含两个整数,用一个空格隔开,分别表示N个数中的最大值和最小值4.样例输入54 6 7 3 144 3 5 15.样例输出7

34、15 1,#include#define N 100int main()int n,i,max,min;int aN;scanf(%d,求最小非平凡因子 1.题目描述给定一个整整数n(2 n 50),求n的最小非平凡因子。 2.输入输入仅一行,一个正整数n(2 n 50)。3.输出输出仅一行,如果n是素数,输出prime;否则,输出n的最小非平凡因子。4.样例输入355.样例输出56.提示对于合数n,n一定存在不大于sqrt(n)的素因子; 1和n都是n的平凡因子,其他因子称为非平凡因子; 最小非平凡因子一定是素数,符号三角形问题1.题目描述下图是一个首行有 7 个符号的符号三角形,第一行的排

35、列已经给定。并且2 个同号下面都是“”号,2 个异号下面都是“”号。 + + - + - + + + - - - - + - + + + - - + + - - + - - - + 符号三角形的第一行有n个符号。符号三角形问题要求对于给定第一行符号个数n,计算第一行有多少种“+”“-”组合排列方式,使这个符号三角形所含的“”和“”的个数相同。2.输入符号三角形的第一行符号个数,类型整型(=20)3.输出满足题目要求的不同的符号三角型个数,类型整型4.样例输入35.样例输出46.提示由于算法的时间复杂度比较大O(2n),故建议在测试时n的取值不宜太大。,生理周期1.题目描述人生来就有三个生理周期

36、,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里

37、不是3)。2.输入输入四个整数:p, e, i和d。 p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,可能小于p, e, 或 i。 所有给定时间是非负的并且小于365, 所求的时间小于21252。3.输出从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。,#includevoid main() 书上的输出有问题int p ,e,i,d,j,no=1;scanf(%d%d%d,数制转换 1.题目描述求任意两个不同进制非负整数的转换(2进制16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,.,9,a,b

38、,.,f)或者(0,1,.,9,A,B,.,F)。2.输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 = a,b = 16。3.输出输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,.,9,A,B,.,F)。4.样例输入15 Aab3 75.样例输出210306,选课1.题目描述教务网站如期的在选课之日出问题了,这次的问题是登陆窗口的验证码无法显示了,同学们只能靠猜验证码来登陆选课。教务的登陆系统刚刚经过改进,改进后的验证码均为1.N的一个排列。一般的同学们在试验的时

39、候都是按照所有排列的字典序逐个试验,但是TN发掘这样试验很乏味,所以他决定每次尝试前一个排列后面的第M个排列。但是一段时间之后他发现,寻找一个排列后面的第M个排列并不是一件容易的事情,所以他希望你帮助他。2.输入Line 1: N (1 = N = 10000)Line 2: M (1 = M = 100)Line 3: 1.N的一个排列3.输出所求的排列4.样例输入531 2 3 4 55.样例输出1 2 4 5 3,字符串插入 1.题目描述有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的0。)将substr插入到str

40、中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。2.输入输入包括若干行,每一行为一组测试数据,格式为str substr3.输出对于每一组测试数据,输出插入之后的字符串。4.样例输入abcab eee12343 5555.样例输出abceeeab12345553,排列 1.题目描述大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。任务描述:给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列

41、1 2 3n。比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列为3 1 2,下2个排列为3 2 1,因此答案为3 2 1。2.输入第一行是一个正整数m,表示测试数据的个数,下面是m组测试数据,每组测试数据第一行是2个正整数n( 1 = n 1024 )和k(1=k=64),第二行有n个正整数,是1,2 n的一个排列。3.输出对于每组输入数据,输出一行,n个数,中间用空格隔开,表示输入排列的下k个排列。4.样例输入33 12 3 13 13 2 110 21 2 3 4 5 6 7 8 9 105.样例输出3 1 21 2 31 2 3 4 5 6 7 9 8 10,#includ

42、e#include#define MAX_LEN 200 有点问题 但问题不大 最后一行输不出来int an1MAX_LEN+10;int an2MAX_LEN+10;char szLine1MAX_LEN+10;char szLine2MAX_LEN+10;int main()scanf(%s,szLine1);scanf(%s,szLine2);int i,j;memset(an1,0,sizeof(an1); memset(an1,0,sizeof(an2);int nLen1=strlen(szLine1);j=0;for(i=nLen1-1;i=0;i-)an1j+=szLine1i

43、-0; int nLen2=strlen(szLine2);j=0;for(i=nLen2-1;i=0;i-)an2j+=szLine2i-0;for(i=0;i=10)an1i-=10; an1i+1+;bool bStartOutput=false;for(i=MAX_LEN;i=0;i-)if(bStartOutput)printf(%d,an1i);else if(an1i)printf(%d,an1i); bStartOutput=true;return 0;,采药1.题目描述辰辰是个很有潜能、天资聪颖的孩子,他的梦想是称为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师

44、为了判断他的资质,给他出了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”2.输入输入的第一行有两个整数T(1 = T = 1000)和M(1 = M = 100),T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的的整数,分别表示采摘某株草药的时间和这株草药的价值。3.输出输出只包括一行,这一行只包含一个整数,表示在规定的时间内

45、,可以采到的草药的最大总价值。4.样例输入70 371 10069 11 25.样例输出3,分解因数1.题目描述给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * . * an,并且1 a1 = a2 = a3 = . = an,问这样的分解的种数有多少。注意到a = a也是一种分解。2.输入第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a (1 a 32768)3.输出n行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数4.样例输入22205.样例输出14,#include int t(0);void f

46、(int a,int b) for(int i(a);i*i=b;+i) if(b%i=0) t+; f(i,b/i); int main() int n(0); scanf(%d,字符串排序1.题目描述先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串少于一百个字符。如果在输入过程中输入的一个字符串为“stop”,也结束输入。然后将这输入的该组字符串按每个字符串的长度,由小到大排序,按排序结果输出字符串。 2.输入字符串的个数,以及该组字符串。每个字符串以n结束。如果输入字符串为“stop”,也结束输入.3.输出将输入的所有字符串按长度由小到大排序输出(如

47、果有“stop”,不输出“stop”)。4.样例输入5sky is greycoldvery coldstop3it is good enough to be proud ofgoodit is quite good5.样例输出coldvery coldsky is greygoodit is quite goodit is good enough to be proud of,字符串数组排序问题1.题目描述给定一组字符串,按指定的排序方式输出这些字符串。排序可是自然顺序(inc)、自然逆序(dec)、忽略大小写顺序(ncinc)、忽略大小写逆序(ncdec)等。 2.输入输入有多行,第一行为

48、一个表明排序方式的字符串见题面,第二行为字符串的数目。其余各行每行一个字符串,字符串中间可能空格,前后也可能有空格,但前后的空格要忽略。3.输出输出也有多行,按指定的顺序输出输入的字符串。4.样例输入ncdec3Hello World!Youre right!haha! youre wrong!5.样例输出Youre right!Hello World!haha! youre wrong!,#include #include #include #define N 8int s92=0;int t(0);void f(int *a,int k) if(k=N+1) int sum(0); for(int i=1;i=8;+i) sum+=ai*(int)pow(10.0,8.0-i); /printf(%d,ai); /printf(,); st+=sum; else for(int i=1;i=N;+i) ak=i; bool flag=true; for(int j=1;jk;+j) if(aj=ak|aj-j=ak-k|aj+j=ak+k) flag=false; break; if(flag) f(a,k+1); int main() int n(0); scanf(%d,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号