题目.docx
- 文档编号:5450042
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:80
- 大小:157.77KB
题目.docx
《题目.docx》由会员分享,可在线阅读,更多相关《题目.docx(80页珍藏版)》请在冰豆网上搜索。
题目
(数据结构)冒泡排序
TimeLimit:
2000MSMemoryLimit:
30000KB
TotalSubmit:
151Accepted:
68
Description
给定N个整数的序列,要求使用冒泡排序输出从小到大排序的结果,并输出每一次交换的数字.
Input
第一行是整数N(1<=N<=5000)表示要排序数的个数
接下去的一行是N个整数,每个整数Ni的范围在int的显示范围内.
Output
首先输出冒泡排序中所需要交换的数字Xi,Yi(相等的不需要交换,两个数字之间有一个空格),每次交换输出一行.
最后一行输出排好序的N个数(从小到大),两个数字之间有一个空格
SampleInput
5
32124
SampleOutput
32
21
32
32
12234
Source
数据结构练习
[Submit][States][Discuss]
这题开始的代码,居然是No-OutputLimitExceed:
#include
intline[5002];
intmain()
{
intn,i,j;
inttemp;
while(scanf("%d",&n))
{
for(i=0;i scanf("%d",&line[i]); for(i=0;i for(j=i+1;j if(line[j] printf("%d%d\n",line[i],line[j]); temp=line[i];line[i]=line[j];line[j]=temp; } } } printf("%d",line[0]); for(i=1;i printf("%d",line[i]); printf("\n"); } return0; } 原来这题只要一个case就行了,总是惯性思维的会搞成多case的,去掉while循环就能AC: #include intline[5002]; intmain() { intn,i,j; inttemp; scanf("%d",&n); for(i=0;i scanf("%d",&line[i]); for(i=0;i for(j=i+1;j if(line[j] printf("%d%d\n",line[i],line[j]); temp=line[i];line[i]=line[j];line[j]=temp; } } } printf("%d",line[0]); for(i=1;i printf("%d",line[i]); return0; } 整数的拆分 TimeLimit: 1000MSMemoryLimit: 30000KB TotalSubmit: 325Accepted: 125 Description 给定一个整数,求有多少种拆分的方法. 例如对于2,有两程拆分方法 1+1=2 0+2=2 (2+0和0+2是一样的) 拆分的数必须为非负整数,-1+3和1.5+0.5都是不正确的拆分方法 Input 本题有多组测试数据,每组一行,每行有一个正整数N(1<=N<=100) Output 每组测试数据输出一行,表示有多少种拆分方法 SampleInput 1 3 5 SampleOutput 1 3 7 Source EOJ [Submit][States][Discuss] 这题是大牛参考discuss里的TLE代码修改的: #include usingnamespacestd; intans[105][105]; intnum_del(intn,intm) { if(ans[n][m]! =-1) returnans[n][m]; if(n==1||m==1) { ans[n][m]=1; return1; } if(n { ans[n][m]=num_del(n,n); returnans[n][m]; } if(n==m) { ans[n][m]=num_del(n,m-1)+1; returnans[n][m]; } ans[n][m]=num_del(n,m-1)+num_del(n-m,m); returnans[n][m]; } intmain() { intn; memset(ans,-1,sizeof(ans)); while(1==scanf("%d",&n)) { printf("%d",num_del(n,n)); printf("\n"); } return0; } Zero TimeLimit: 1000MSMemoryLimit: 30000KB TotalSubmit: 394Accepted: 196 Description Alongtimeagopeoplefoundthevaluezerotobeveryuseful.Justthinkabouttheromansandmanymorenationsthatdidn'tknowthezero.Theirnumberrepresentationscouldn'tdisplaythezeroandthat'swhytheyaredeadnow. Soyou'vegottounderstandtheoverwhelmingimportanceofthisbeautifulgiftofscience(ornature? )andpraisethezero.That'swhatyou'lldohere. Findouthowmanytrailingzerosareattheendofn! (nfactorial).That'sallyouhavetodo,butbecarefultowriteanefficientprogram,ncanbereallylarge.Forexample, 42! =1405006117752879898543142606244511569936384000000000 sotheanswerforn=42wouldbe9,sincethereareninezerosattheend. Input Thefirstlinecontainsanintegerm,thenumberoftestcases.Afterthatfollowmlines.Everylinerepresentsonetestcase,whichonlycontainstheintegernumbern.Thevalueofnwillbeatleast1andwon'tbebiggerthan2.000.000.000. Output Foreachtestcase,printalinecontainingthenumberoftrailingzeros.Donotprintwhitespacebeforeorafterthenumber. SampleInput 4 1 23 42 2000000000 SampleOutput 0 4 9 499999997 Source FreshmanProgrammingContest [Submit][States][Discuss] 这题还是大牛教的...伤心... ,不知为何用C++提交是CompileError,必须用G++提交才能AC: #include usingnamespacestd; intmain() { longlongn; intt; cin>>t; while(t--) { cin>>n; longlongk=5; longlongans=0; while(k<=n) { ans+=n/k; k*=5; } cout< } return0; } 不同的编译器: GCCG++CC++的区别 gcc是c的编译器,g++是c++的编译器。 cc一般是一个符号连接,指向gcc。 CC一般是makefile里面的一个名字,具体是什么根据实际情况决定。 gcc和g++都是GNU(组织)的一个编译器。 误区一: gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1,后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。 C++的语法规则更加严谨一些。 2,编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。 误区二: gcc不会定义__cplusplus宏,而g++会 实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。 误区三: 编译只能用gcc,链接只能用g++ 严格来说,这句话不算错误,但是它混淆了概念,应该这样说: 编译可以用gcc/g++,而链接可以用g++或者gcc-lstdc++。 因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。 但在编译阶段,g++会自动调用gcc,二者等价。 请问CCccgccg++本质区别在什么地方? 传统上,UNIXOS会配带Ccompilerbydefault.一般用符号名cc.而C++compiler需要另外买. 常见的有: Linux: gcc/g++ Solaris: cc/CC HP-UX: aCC AIX: xlc/xlC SCO: ? /? 几乎所有的情况,C/C++compiler都只是frontenddriver.后面的编译器是一样的.比如gcc,g++提供不同的选项给编译器以及linkeditor.这些包括用户选项,缺省选项,对应的缺省系统库.每个compiler有一个configuratoinfile来指定这些缺省选项.使用verbosemode(-v)可以看到这些内容. C++程序因为语法(namespace,class,overload...),需要mangle所有的symbolname.与C程序link的时候需要用extern"C". C++的编译器肯定可以编译C的的代码,注意除了C++对C的语法扩充之外,编译和链接C和C++的标准库通常也不一样呢。 我用gcc而非g++也编译了C++的程序就证明了这一点。 【来源】 矩形相交 TimeLimit: 1000MSMemoryLimit: 30000KB TotalSubmit: 139Accepted: 49 Description 给定平面上2个边平行于坐标轴矩形,判断他们是否相交,即两个矩形公共面积>0(只重合了某部分边公共面积为0). Input 输入有多个case,每个case有8个整数,x11y11x12y12x21y21x22y22,分别是第一个矩形的左上角坐标,右下角坐标,第二个矩形的左上角坐标,右下角坐标. Output 对于每个case,输出yes,如果两个矩形相交,否则输出no SampleInput 02201441 SampleOutput yes Source EOJ [Submit][States][Discuss] 难得有跟1000题差不多水的题: #include usingnamespacestd; intx11,y11,x12,y12,x21,y21,x22,y22; intmain() { while(scanf("%d%d%d%d%d%d%d%d",&x11,&y11,&x12,&y12,&x21,&y21,&x22,&y22)==8) { if(y12>=y21||y22>=y11||x12<=x21||x22<=x11)printf("no\n"); elseprintf("yes\n"); } } PolygonDivision TimeLimit: 2000MS MemoryLimit: 131072K TotalSubmissions: 609 Accepted: 306 Description Givenaregularpolygon,therearenumerouswaystodivideitintoseveraltrianglesand/orquadranglesbyaddingsomediagonalsthatdonotproperlyintersecteachother.Forexample,Figure4showsalltendifferentdivisionsofaregularpentagonintotrianglesandquadrangles. Figure4: Divisionsofaregularpentagonintotrianglesandquadrangles Givenn,thenumberofsidesofthepolygon,computethenumberofsuchdivisions. Input Theinputcontainsmultipletestcases.Eachtestcaseconsistsofasingleintegern(3≤n≤5000)onaseparateline.TheinputendswhereEOFismet. Output Foreachtestcase,printtheanswermodulo264onaseparateline. SampleInput 3 4 5 6 7 8 9 10 SampleOutput 1 3 10 38 154 654 2871 12925 Source PKUCampus2008(POJFounderMonthlyContest–2008.05.10),frkstyc [Submit] [GoBack] [Status] [Discuss] 本题代码参考: 牛虻之木有情 #include #include #include usingnamespacestd; unsigned__int64u[5005]; unsigned__int64t[5005]; intmain() { intn; u[0]=u[1]=u[2]=1; t[0]=t[1]=t[2]=1; for(inti=3;i<=5000;i++){ u[i]=0; for(intj=2;j<=i-1;j++) { u[i]+=t[j]*t[i-j+1]; } t[i]=u[i]; for(intj=2;j<=i-2;j++) { t[i]+=t[j]*u[i-j+1]; } } while(scanf("%d",&n)! =EOF){ cout< } return0; } 分析(参考解题报告): 如果分出的全为三角形的话,那就是正多边形三角剖分问题。 它的结果就是Catalan数。 现在也可以划分出四边形的话,可以采用动态规划策略。 具体如下: 将n边形的顶点按顺时针或逆时针编号为1,2,3....n(n>=3),设T(n)为最终的结果,E(i,j)为i号顶点和j号顶点连成的对角线(1<=i (2)=1.分两种情况讨论: (1)边E(1,n)为划分后一个三角形的一条边。 i为该三角形的另外一个顶点(2<=i<=n-1),因此,对角线E(1,i)和对角线E(i,n)将n边形分为1个i边形,1个由顶点(1,i,n)组成的三角形,1个(n-i+1)边形;这种情况下,问题规模缩小为小i边形,和(n-i+1)边形的。 此时的种数为: a=∑T(i)*T(n-i+1) (2<=i<=n-1) (2)边E(1,n)为划分后一个四边形的一条边。 i,j为该四边形的另外两个顶点(2<=i<=n-2,i+1<=j<=n-1)。 1,n,i,j四个顶点将n边形分为1个i边形,1个j-i+1边形,1个n-j+1边形和该四边形。 我们可以继续将i边形,j-i+1,n-j+1边形继续划分,规模也将继续缩小。 此时的种数为: b=∑∑T(i)*T(j-i+1)*T(n-j+1);(2<=i<=n-2,i+1<=j<=n-1) 故T(n)=a+b=∑T(i)*T(n-i+1)+∑∑T(i)*T(j-i+1)*T(n-j+1); 此时的时间复杂度为O(n^3),会TLE,我们可以将上述表达式写成以下形式以降低时间复杂度 U(n)=∑T(i)*T(n-i+1);(2<=i<=n-1) T(n)=U(n)+∑T(i)*U(n-i+1);(2<=i<=n-2) 学编程决不可心浮气燥任何实践都是…… 我认为有些人的观点错了。 错得一塌糊涂。 对于这个问题,我的基本观点是: 任何实践都是理论的载体或表现形式。 而理论也是由实践上升而来的。 两者是辨证的。 今天,我们只关注它的前一部分: 任何实践都是理论的载体和表现形式。 我不是想故弄玄虚,但真理的外表看上去往往就是这么奇形怪状、难以理解。 让我来给你解释一下吧。 比如: 战争是军事理论的实践,也是它的表现形式。 战争的胜负取决于指挥者军事理论的掌握程度(别给我举赵括这类“纸上谈兵”的反例,他们根本算不上掌握了军事理论,充其量只算是“背”下了军事理论。 “掌握”和“倒背如流”这是两个概念。 ) 1、VC、VB、Delphi……,你该学哪个? 具体到编程而言,我要告诉你: 任何一种计算机语言,都是计算机科学理论的载体或表现形式。 C++很神吗? Java很酷吗? 它们差距很远吗? 是的。 但从理论的层面上讲,它们没有区别,都是“面向对象”理论的一个具体形式而已。 现在的程序员们被发行编译软件(通常我们将其称为“系统软件”)的商家不断推出的产品搞得眼花缭乱,头痛欲裂。 不断地跟在新语言后面跑,这条路还没跑到头,那边的“新路”又鸣锣开张了,于是再跟着跑……渐渐地有些人开始感叹: 学海无涯、学无止境,或什么“程序员是青春饭,过了三十别想干”…… 在此我不得不叹息: 中国的教育真是一种“形而上学”的教育。 早在高中时代我们就学过“辨证唯物主义”的基本理论: 做事情要抓主要矛盾。 这一条恐怕谁都知道,却鲜见谁能在实践中把这一理论运用得“炉火纯青”的。 把这一理论运用到编程上来讲就是: 理论是主要矛盾,语言是次要矛盾,学会了理论,再具体到学一种语言时,你只不过是在进行某种消遣而已。 现在学VC的普遍看不起学VB的或学Delphi的。 但如果一个用Delphi的人,在需要写web程序时,用TCP/IP做了一个构架,嵌入到应用程序中;而另一个用VC的人却只会把一个又一个的组件拖来拉去的做些个“例子程序”的翻版。 你说他们两个谁历害? Delphi和VC谁历害? 真应了这样一段话,问: 纽约好还是上海好? 答: 有钱哪儿都好,没钱哪儿都不好。 上海的富人并不比纽约的富人少多少的优越感,而纽约的乞丐也不比上海的乞丐多多少幸福感。 现在你还会说学VC的人就一定比学Delphi的人水平高、“钱景”好吗? 2、“浅薄”绝不该是中国程序员的性格特征! ! ! 想问一句: 中国程序员这么多,你们真地把基础理论学好了吗? 别用你现有的编程经历告诉我: 编程不需要数学,不需要数据结构,不需要编译原理…………说话得负责任,您知道吗? 我之所以发表这篇文章,就是因为再也看不下去这种在中国编程界漫延的歪理邪说了! 邪教害死的是人的个体,你们害死的是中国软件业的未来! 如果再让这种理论继续毒害编程新手的思想,中国将在计算机领域失去民族的尊严! ! ! 请问,操作系统、编译软件、数据库系统……这些被称为“系统软件”的东东,中国有几样拿得出手的产品? 也许是我孤陋寡闻,据我所知: 我们国家一件像样的也没有。 不错,我们是有一些网站的股票在西方上市了,我们是有一些人被国外公司请去做高级职员了,我们也有一些人把西方的官方网站给黑了……但是,我们用的编译工具是谁的产品? 我们微机里装得是谁做出的操作系统? 我们的程序跑在谁的芯片上? 爱之深,恨之切。 我爱的是中国,但我痛恨不是中国,而是在中国编程界普遍流行的“浅薄”和“自以为是”,这是我们民族软件业的一颗毒瘤! 是的,现在编程方面快速入门的书满天飞,让程序员的门槛越来越低。 我这个外行就得益于这个“低门槛”,跑了进来。 但进来后,我们就不能再这样浅薄下去了——我的兄弟们! 用他国提供的工具做几个网站,写几个应用程序,弄出几个病毒……是振兴不了民族软件业的。 顺便说一句: 我尊敬求伯君,但我不认为金山公司和其系列产品配得上被称为“民族软件业”的大旗,相对这个称号,它差得太远
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 题目