13年7月7日 ACM 第一天培训

来源:互联网 发布:怎样帮淘宝刷好评挣钱 编辑:程序博客网 时间:2024/05/17 23:59

共6题   比赛中 解出两题(A与E) B题 交了超时 未过  C与F没有解出

A题  挺简单的,关键在于整数与小数之间的转换,通过C语言可方便解出,也可通过C++中的setiosflags进行转换

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double a,b,m,n,p;
    while(cin>>m>>n)
    {
         p=(double)n/m;
         a=(m+p)/2;
         b=(m-p)/2;
         cout<<setiosflags(ios_base::left)<<setiosflags(ios_base::fixed)<<setprecision(2)<<setw(3)<<a<<" "<<b<<endl;
    }
    return 0;
}

 

B题  刚开始题意理解错了,浪费了许多时间,待题意理解正确后,在对于寻找最长等差数列上出现问题,导致结果错误

        从第三个数开始判断  a[ i ]-a[ i-1 ]=a[ i-1 ]-a[ i -2 ]  判断等差数列,并记录此等差数列的长度,开辟数组  len[ i ]  记

       录长度,并开辟一个数组  D[ i ]  记录这个等差数列的公差,最后得到  len  数组中最大数为  j  ,输出  D[ j ]

 

C题  题意不太理解,经过讲解,有些理解

        关键在于板与板之间的联系,从第一行开始枚举,之后的几行要根据之上翻过的次数进行翻板

 

D题  对于括号的排列,首先要确定前面的“( ”,后面一定有 “  )”与之对应,前一对括号的放置方法乘以后面  N-1 对括

        号的放置方法,依次累加即得  N  个括号的的放置方法

       即         令h(1)=1,h(0)=1,catalan数满足递归式:

                   h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2)                                 卡特兰数组

 

E题  刚开始用递归,结果超时了,就在找规律,发现这个函数 每 5 个循环 就发现 很水了……

#include<stdio.h>
int main()
{   long long m,i;
    float f[6];
    while(scanf("%f%f%I64d",&f[1],&f[2],&m)!=EOF)
    {    for(i=3;i<=5;i++)
         {f[i]=(f[i-1]+1)/f[i-2];}
         if(m%5==1)
              printf("%.6f\n",f[1]);
         else if(m%5==2)
              printf("%.6f\n",f[2]);
         else if(m%5==3)
              printf("%.6f\n",f[3]);
         else if(m%5==4)
              printf("%.6f\n",f[4]);
         else if(m%5==0)
              printf("%.6f\n",f[5]);}
    return 0;
}

F题  如果只有三个点就好做多了,但是真的不知道 他给500个数 从中找 等腰三角形 好吧,这个真心不会!!

 

 

 

 

 

 

 

 

原创粉丝点击