您的位置:首页 > 其它

北京航空航天大学2014第三次上机解题报告

2014-11-03 18:02 309 查看


2014第三次上机解题报告~

第一题:初见杀

ProblemDescription

Last_Day买了很多猫粮。

猫粮跟狗粮有很大区别。

狗粮是长这样的:

#

###

#####

猫粮是长这样的

A

ABA

ABCBA

ABCDCBA

ABCDEDCBA

ABCDCBA

ABCBA

ABA

A

请你帮Last_Day摆放猫粮。

(请不要好奇为什么Last_Day要买猫粮,他最近收养了一只吃东西比较奇怪的羚羊而已。)

Input

输入多组数据。

每组数据只有一行,为一个正整数n(n为奇数且不超过51)。

Output

输出对应菱形,见样例。

SampleInput

1

3

SampleOutput

A

A

ABA

A

Hint

初见杀

这道题如果没记错的话是2013年第四次练习里的,做过一遍,于是思路上来就有了,用了一个字符串,就把这个问题解决了~~

代码如下

#include<iostream>

#include<cstring>

usingnamespacestd;


intmain()

{

stringa="XABCDEFGHIJKLMNOPQRSTUVWXYZ";

intn;

while(cin>>n)

{

inti;

for(i=1;i<=(n+1)/2;i++)

{

intcounter;

for(counter=1;counter<=(n+1)/2;counter++)

{

if(counter<=(n+1)/2-i||counter>=(n+1)/2+i)

{

cout<<"";

}

else

{

cout<<a[counter+i-(n+1)/2];

}

}

counter=counter-2;

for(;counter>0;counter--)

{

if(counter<=(n+1)/2-i||counter>=(n+1)/2+i)

{

cout<<"";

}

else

{

cout<<a[counter+i-(n+1)/2];

}

}

cout<<endl;

}

i=i-2;

for(;i>0;i--)

{

intcounter;

for(counter=1;counter<=(n+1)/2;counter++)

{

if(counter<=(n+1)/2-i||counter>=(n+1)/2+i)

{

cout<<"";

}

else

{

cout<<a[counter+i-(n+1)/2];

}

}

counter=counter-2;

for(;counter>0;counter--)

{

if(counter<=(n+1)/2-i||counter>=(n+1)/2+i)

{

cout<<"";

}

else

{

cout<<a[counter+i-(n+1)/2];

}

}

cout<<endl;

}

}

}



欢迎,14211065,[0条未读站内信
]|退出

首页

题目

赛事

小组

测试机

测试脚本

帮助

用户

编程啦

服务器时间(GMT+8):

2014-11-0317:13:31

第二题:不要不要合唱比赛

ProblemDescription

jhljx最近参加了合唱比赛,和大家一起取得了好成绩。但是jhljx比较笨,不会合唱,唱的特别烂。。

他决定好好学学,于是他就去找了度娘,发现。。哇噻~~~音乐方面的知识好多吖。。

可是他是一个小白,什么都不会。

在找度娘的过程中,他发现了以下资料,在这里和大家分享。

下面就根据上面他找到的这些资料来解决问题啦。相信你会很开心吧。因为他开始学音乐了。

首先,他先假定音符中的do,re,mi,fa,so,la,si分别对应1,2,3,4,5,6,7。当然音符也是有音高的,有高八度,低八度之分。

音符上边加一个点,表示高8度,音符下面加一个点,表示低八度。低八度的音符表示为A,B,C,D,E,F,G(分别与1,2,3,4,5,6,7对应),

高八度的音符表示为H,I,J,K,L,M,N(分别与1,2,3,4,5,6,7对应)。

一个音符如"5"表示4分音符,是1拍;一个音符如"5-"表示二分音符,是2拍,一个音符如"5-
--"(5后边跟3个短横线,没有空格)表示全音符,是4拍。

一个音符如"5_"表示8分音符,'_'是1/2拍,一个音符如"5="(5后边是等号)表示16分音符,"="是1/4拍。

请你计算一段音乐的时值是多少(即总共需要几拍)。

Input

输入一组数据。

每组数据为一段音乐。(保证音乐的字符为1,2,3,4,5,6,7,A,B,C,D,E,F,G,H,I,J,K,L,M,N中的字符,不包含不合法字符)

Output

输出这段音乐的时值是多少。如果结果为整数,输出一个整数,如果结果为分数,用a/b的形式输出并保留最简分数形式。(保证结果合法,不用进行不合法判断)

SampleInput

A12---H_3=1321-1421

SampleOutput

71/4

Hint

A12H313211421这是13个数,每个1拍,是13拍。-为1拍,总共4个。。现在17拍。_为1/2拍,=为1/4拍。总共为17+3/4拍,即71/4拍。

这个题,也就是真心百思不得其解的问题,我对于C++中字符输入的终止条件一直很不明确,所以。。。这道题用正常的检验方式不敢交

在我的编译器编译之后是这样的

也就是enter之后不会有什么变化。。。但是如果这样:“先输入要输入的,比如:”1234”,输入enter,然后输入”control+Z”,然后再”enter”。

然后就出结果啦~~

不过这道题。。。很悲伤地没敢交,于是只能4分了。。。

代码如下~:

#include<iostream>

usingnamespacestd;

intmain()

{

inta=0,b=0,d=0,sum;

charc;

while(cin>>c)

{

if(c=='_')

{

a++;

}

elseif(c=='=')

{

b++;

}

else

{

d++;

}

}

sum=d*4+a*2+b;

if(sum%4==0)

{

cout<<sum/4<<endl;

}

elseif(sum%2==0)

{

cout<<sum/2<<"/"<<"2"<<endl;

}

else

{

cout<<sum<<"/"<<"4"<<endl;

}

}

第三题:不要不要数列求和

ProblemDescription

给你一个公式f(n,m)=(3!!+5!!+……+(2*n+1)!!)-(2!!+4!!+……+(2*m)!!),求公式的值。结果对10007取模。

0羊会给大家带来好运,相信你能解决这个问题。

Input

输入多组数据。

每组数据只有一行,为两个正整数n和m(1<=n,m<=100)。

Output

输出公式的结果。

SampleInput

11

SampleOutput

1

Hint

!!表示双阶乘。(2*n)!!=2*4*6*……*(2*n)。(2*n+1)!!=1*3*5*……(2*n+1)。

取模运算时尽可能边加边取模,边乘边取模。

注意当一个数为负数时,应该使用ans=((ans+sum)%mod+mod)%mod;的形式来将取模的值变为正数。

这个题貌似是很水的。。。而且学长都讲了,只不过评测出了点小问题。。。所以。。。直接贴代码~

#include<iostream>

usingnamespacestd;

intmain()

{

intn,m;

while(cin>>n>>m)

{

intsum1=0,sum2=0,k1=1,k2=1;

for(inti=1;i<=n;i++)

{

k1=k1*(2*i+1)%10007;

sum1=(sum1+k1)%10007;

}

for(intj=1;j<=m;j++)

{

k2=k2*(2*j)%10007;

sum2=(sum2+k2)%10007;

}

cout<<sum1-sum2<<endl;

}

}

第四题:不要不要丧心病狂

ProblemDescription

jhljx又决定来出题了,上次上机以后有人说他是黑心学长,,噗。。。

肿么可以这样。。

松辰学妹对jhljx说不要不要丧心病狂。。jhljx说我给你出一道题,你要是答对了,你就赢了。。

松辰学妹说这还不简单啊。。

于是jhljx给了松辰学妹一个长度为n的数列A1,A2,A3……An。他说你能找出这个序列中a[i]-a[j]的最大值吗(保证i<j)?

松辰学妹说用数组啊。。jhljx说,没学数组,不准用。。用了你就跪了。。

松辰学妹说好吧。。这可怎么办呢?

嗯。。松辰学妹正在思考中。。让我们大家一起来帮帮他吧。。

卖个萌。。~\(≧▽≦)/~啦啦啦

Input

输入多组数据。

每组数据两行,第一行是一个正整数n(2<=n<=1000000)。第二行是n个数,每个数之间用空格隔开。保证这些数在int范围内。

Output

输出满足条件的最大值。

SampleInput

2

10020

SampleOutput

80

Hint

这道题尽量不要用数组,因为没有学。不用数组完全可以做。

PS:这道题没有去刻意卡内存。。

这个题也很水,学长。。。也给讲了。。。

这个题最有可能的错误是初始设定的最大值为0,所以导致负数计算时出现问题

代码。。。

#include<iostream>

usingnamespacestd;

intmain()

{

intn;

while(cin>>n)

{

inta,b,max1=-10000000;

cin>>a;

for(inti=1;i<n;i++)

{

cin>>b;

if(a-b>=0)

{

if(a-b>max1)

{

max1=a-b;

}

}

else

{

if(a-b>max1)

{

max1=a-b;

}

a=b;

}

}

cout<<max1<<endl;

}

}

第五题:英语杀。。。(真心英语杀)

这道题,最考验的就是英语。。。作为一名英语渣。。。学长的讲解简直如沐春风。。。

知道了意思后做题就很简单了。。。

代码如下

#include<iostream>

usingnamespacestd;

intmain()

{

intn;

cin>>n;

for(inti=1;i<=n;i++)

{

intm,a=0;

cin>>m;

for(intj=1;j<=m;j++)

{

intc;

cin>>c;

if(c%3==0)

{

a++;

}

}

if(a==m)

{

cout<<"Case#"<<i<<":Yes"<<endl;

}

else

{

cout<<"Case#"<<i<<":No"<<endl;

}

}

}

总之就是,本次整体上机题目不很难,就是题目或冗长或复杂,或者完全是英语。。。

所以没能做五道题很遗憾。。。

希望自己下次努力吧~!!

(在原题中有些地方有图,这里没有图了,想看题目也可以登录acm.buaa.edu.cn查找,谢谢大家)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: