题目.docx

上传人:b****3 文档编号:5450042 上传时间:2022-12-16 格式:DOCX 页数:80 大小:157.77KB
下载 相关 举报
题目.docx_第1页
第1页 / 共80页
题目.docx_第2页
第2页 / 共80页
题目.docx_第3页
第3页 / 共80页
题目.docx_第4页
第4页 / 共80页
题目.docx_第5页
第5页 / 共80页
点击查看更多>>
下载资源
资源描述

题目.docx

《题目.docx》由会员分享,可在线阅读,更多相关《题目.docx(80页珍藏版)》请在冰豆网上搜索。

题目.docx

题目

(数据结构)冒泡排序

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、“浅薄”绝不该是中国程序员的性格特征!

想问一句:

中国程序员这么多,你们真地把基础理论学好了吗?

别用你现有的编程经历告诉我:

编程不需要数学,不需要数据结构,不需要编译原理…………说话得负责任,您知道吗?

我之所以发表这篇文章,就是因为再也看不下去这种在中国编程界漫延的歪理邪说了!

邪教害死的是人的个体,你们害死的是中国软件业的未来!

如果再让这种理论继续毒害编程新手的思想,中国将在计算机领域失去民族的尊严!

请问,操作系统、编译软件、数据库系统……这些被称为“系统软件”的东东,中国有几样拿得出手的产品?

也许是我孤陋寡闻,据我所知:

我们国家一件像样的也没有。

不错,我们是有一些网站的股票在西方上市了,我们是有一些人被国外公司请去做高级职员了,我们也有一些人把西方的官方网站给黑了……但是,我们用的编译工具是谁的产品?

我们微机里装得是谁做出的操作系统?

我们的程序跑在谁的芯片上?

爱之深,恨之切。

我爱的是中国,但我痛恨不是中国,而是在中国编程界普遍流行的“浅薄”和“自以为是”,这是我们民族软件业的一颗毒瘤!

是的,现在编程方面快速入门的书满天飞,让程序员的门槛越来越低。

我这个外行就得益于这个“低门槛”,跑了进来。

但进来后,我们就不能再这样浅薄下去了——我的兄弟们!

用他国提供的工具做几个网站,写几个应用程序,弄出几个病毒……是振兴不了民族软件业的。

顺便说一句:

我尊敬求伯君,但我不认为金山公司和其系列产品配得上被称为“民族软件业”的大旗,相对这个称号,它差得太远

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

当前位置:首页 > 医药卫生 > 基础医学

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

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