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



 

2014第三次上机解题报告~

 

第一题:初见杀

Problem Description

Last_Day买了很多猫粮。
猫粮跟狗粮有很大区别。
狗粮是长这样的:

 #

 ###

#####

猫粮是长这样的

   A

  ABA

 ABCBA

 ABCDCBA

ABCDEDCBA

 ABCDCBA

 ABCBA

  ABA

   A

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

Input

输入多组数据。
每组数据只有一行,为一个正整数nn为奇数且不超过51)。

Output

输出对应菱形,见样例。

Sample Input

1
3

Sample Output

A

 A

ABA

 A

Hint

初见杀

 

 

 

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

代码如下

 

#include<iostream>
#include<cstring>
using namespace std;
 
int main()
{
    string a="XABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int n;
    while (cin>>n)
    {
        int i;
        for(i=1;i<=(n+1)/2;i++)
        {
            int counter;
            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--)
        {
                        int counter;
            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-03 17:13:31

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

Problem Description

jhljx最近参加了合唱比赛,和大家一起取得了好成绩。但是jhljx比较笨,不会合唱,唱的特别烂。。
他决定好好学学,于是他就去找了度娘,发现。。哇噻~~~音乐方面的知识好多吖。。
可是他是一个小白,什么都不会。

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



下面就根据上面他找到的这些资料来解决问题啦。相信你会很开心吧。因为他开始学音乐了。
首先,他先假定音符中的do,re,mi,fa,so,la,si分别对应1234567。当然音符也是有音高的,有高八度,低八度之分。

音符上边加一个点,表示高8度,音符下面加一个点,表示低八度。低八度的音符表示为A,B,C,D,E,F,G(分别与1234567对应)
高八度的音符表示为H,I,J,K,L,M,N(分别与1234567对应)
一个音符如"5"表示4分音符,是1拍;一个音符如"5-"表示二分音符,是2拍,一个音符如"5- - -"(5后边跟3个短横线,没有空格)表示全音符,是4拍。
一个音符如"5_"表示8分音符,'_'1/2拍,一个音符如"5="5后边是等号)表示16分音符,"="1/4拍。
请你计算一段音乐的时值是多少(即总共需要几拍)。

Input

输入一组数据。
每组数据为一段音乐。(保证音乐的字符为1234567A,B,C,D,E,F,G,H,I,J,K,L,M,N中的字符,不包含不合法字符)

Output

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

Sample Input


A12---H_3=1321-1421

Sample Output

71/4

Hint

A12 H 3 1321 1421这是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>

using namespace std;

 

int main()

{

   int a=0,b=0,d=0,sum;

   char c;

   while(cin>>c)

   {

       if(c=='_')

       {

           a++;

       }

       else if(c=='=')

       {

           b++;

       }

       else

       {

           d++;

       }

   }

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

   if(sum%4==0)

   {

       cout<<sum/4<<endl;

   }

   else if(sum%2==0)

   {

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

   }

   else

   {

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

   }

}

 

 

 

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

ProblemDescription

给你一个公式f(nm)=(3!!+5!!+……+(2*n+1)!!)-(2!!+4!!+……+(2*m)!!),求公式的值。结果对10007取模。
0
羊会给大家带来好运,相信你能解决这个问题。

Input

输入多组数据。
每组数据只有一行,为两个正整数nm1<=n,m<=100)。

Output

输出公式的结果。

Sample Input

11

Sample Output

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>

usingnamespace std;

 

intmain()

{

   int n,m;

   while(cin>>n>>m)

   {

       int sum1=0,sum2=0,k1=1,k2=1;

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

       {

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

           sum1=(sum1+k1)%10007;

       }

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

       {

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

           sum2=(sum2+k2)%10007;

       }

       cout<<sum1-sum2<<endl;

 

   }

}

 

 

 

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

ProblemDescription

jhljx又决定来出题了,上次上机以后有人说他是黑心学长,,噗。。。
肿么可以这样。。
松辰学妹对jhljx说不要不要丧心病狂。。jhljx说我给你出一道题,你要是答对了,你就赢了。。
松辰学妹说这还不简单啊。。
于是jhljx给了松辰学妹一个长度为n的数列A1A2,A3……An。他说你能找出这个序列中a[i]-a[j]的最大值吗(保证i<j)?
松辰学妹说用数组啊。。jhljx说,没学数组,不准用。。用了你就跪了。。
松辰学妹说好吧。。这可怎么办呢?

嗯。。松辰学妹正在思考中。。让我们大家一起来帮帮他吧。。
卖个萌。。~\(≧▽≦)/~啦啦啦

Input

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

Output

输出满足条件的最大值。

Sample Input

2
100 20

Sample Output

80

Hint

这道题尽量不要用数组,因为没有学。不用数组完全可以做。
PS:
这道题没有去刻意卡内存。。

 

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

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

代码。。。

 

#include<iostream>

using namespace std;

 

int main()

{

   int n;

   while(cin>>n)

   {

       int a,b,max1=-10000000;

       cin>>a;

       for(int i=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>

using namespace std;

 

int main()

{

   int n;

   cin>>n;

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

   {

       int m,a=0;

       cin>>m;

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

       {

           int c;

           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查找,谢谢大家)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值