ACM新生选拔赛第三场题解

这是2016.10.14HRBUST软件学院ACM集训队第三次选拔赛的题解。
首先今天的题目与前两次比较的话是比较简单的,单由于是英文的原因,可能看起来会比较难一点。
废话不多说,切入正题。
A题:Average
题意:给你12个浮点数,让你求平均值

#include

int main()
{
    double a[15];
    while(~scanf("%lf",&a[0]))
    {
        double sum=a[0];
        for(int i=1;i<12;i++)
        {
            scanf("%lf",&a[i]);
            sum+=a[i];
        }
        printf("$%.2lf\n",sum/12.0);
    }
    return 0;
}

B题: Brainer
题意:比较大小然后按照规则输出

#include

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        if(a>=b)
        {
            printf("MMM BRAINS\n");
        }
        else
        {
            printf("NO BRAINS\n");
        }
    }
    return 0;
}

C题:Cow
就是求第一个数的每一位分别乘以第二个数的每一位的结果。

#include

int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        int s[105],s1[105],sum1=0,sum2=0,sum=0;
        while(a)
        {
            s[sum1++]=a%10;
            a/=10;
        }
        while(b)
        {
            s1[sum2++]=b%10;
            b/=10;
        }
        for(int i=0;ifor(int j=0;js[i]*s1[j];
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

D题: Dirichlet
求一个序列中的第n个素数是多少

#include


bool isprime(int n)
{
    if(n==1)
    {
        return 0;
    }
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            return false;
        }
    }
    return true;
}

int f[1000005];
int main()
{
    int n,m,k;
    while(~scanf("%d%d%d",&n,&m,&k))
    {
        if(n==0&&m==0&&k==0)
        {
            break;
        }
        int sum=0;
        f[1]=n;
        //f[2]=m;
        int num=0;
        if(isprime(f[1]))
        {
            sum++;
            num=f[1];
        }
        if(sum==k)
        {
            printf("%d\n",num);
            continue;
        }
        for(int i=2;i<=1000002;i++)
        {
           f[i]=f[1]+(i-1)*m;
           if(isprime(f[i]))
           {
               sum++;
               num=f[i];
           }
           if(sum==k)
           {
               break;
           }
        }
        printf("%d\n",num);
    }
    return 0;
}

E题:Engage
简单题目,让求平局的比赛场数
思路:赢一场加3分,平一场双方每人加1分。只需计算所有人的总分,然后用场数乘以3-总分就OK 了。至于为什么的话自己思考下。

#include

int main()
{
    char a[205][205];
    int num[205],n,m;
    while(~scanf("%d%d",&n,&m))
    {
        if(n==0)
        {
            break;
        }
        int sum=0;
        for(int i=0; i"%s %d",&a[i],&num[i]);
            sum+=(num[i]);
        }
        printf("%d\n",m*3-sum);
    }
    return 0;
}

F题:Frog
找相同字母之间的最小的距离(无论是哪个字母)

#include
#include
#include
using namespace std;

int main()
{
    char a[1005];
    int t,iCase=0;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",a);
        int minn=10005;
        int l=strlen(a);
        for(int i=0;ifor(int j=i+1;jif(a[i]==a[j])
                {
                    minn=min(minn,j-i);
                    break;
                }
            }
        }
        if(minn==10005)
        {
            printf("Case #%d: -1\n",++iCase);
        }
        else
        printf("Case #%d: %d\n",++iCase,minn);
    }
    return 0;
}

G题:Game
比较难的推论题。
推出来后只有一个公式就OK了。

#include 

int main()
{
    int T=0, p, n, q;
    while(~scanf("%d%d%d", &n, &p, &q))
    {
        printf("Case %d: %.4f\n", ++T, (q+1.0)/(p+2.0));
    }
    return 0;
}

H题: Harness
给一个方阵,然后这个方阵你需要旋转90度 180度270 度,然后每一次旋转都要与最初的矩阵进行匹配,最后的输出为:在相同位置值一样的数的个数的最大值(旋转3次)

#include
#include
using namespace std;

int a[35][35],b[35][35],c[35][35],d[35][35],e[35][35];
int n;
int judge1()//90度
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            c[n-j+1][n-i+1]=b[i][n-j+1];
        }
    }
    int re=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==c[i][j])
            {
                re++;
            }
        }
    }
    return re;
}

int judge2()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            d[n-j+1][n-i+1]=c[i][n-j+1];
        }
    }
    int re=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==d[i][j])
            {
                re++;
            }
        }
    }
    return re;
}

int judge3()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            e[n-j+1][n-i+1]=d[i][n-j+1];
        }
    }
    int re=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==e[i][j])
            {
                re++;
            }
        }
    }
    return re;
}

int main()
{
    while(~scanf("%d",&n))
    {
        if(n==0)
        {
            break;
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            scanf("%d",&a[i][j]);
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                scanf("%d",&b[i][j]);
            }
        }
        int sum=judge1();
        sum=max(sum,judge2());
        sum=max(sum,judge3());
        printf("%d\n",sum);
    }
    return 0;
}

你可能感兴趣的:(我的个人总结)