XLL的四级通过概率

XLL的四级通过概率

时间: 1ms        内存:128M

描述:

这次是XLL第三次考四级了,作为她的亲属,我是很希望她能通过的。等到XLL出了考场,我问她答得怎么样,她告诉我说~~~不咋样-.-!翻译和作文倒是不难,可是听力她却做的一塌糊涂,omg~~  下午我考完了六级,就帮XLL百度了一下四级的听力答案,竟然让我发现了一个惊天秘密,这答案还真是“三短一长选最长,三长一短选最短,同长为A,同短为C,不然选D”,我马上把这个秘密告诉给XLL,想让她对对答案,可是XLL忘得太快,只能回忆起几个题的答案了,无奈,只能算算她的大概正确率咯。
   请你编程帮XLL算一下她回忆起的题目中有几个做对了,我好估计一下她听力的正确率."三短一长选最长"指最长的选项如果比其他三个选项长度至少大25且其余三项长度都不大于45则选择它;"三长一短选最短"指最短的选项如果比其他三个选项长度至少小25且其余三项长度都不小于45则选择它;“同长为A”指四个选项长度都大于45且任意两项差小于15则选A;“同短为C”指四个选项长度都小于45且任意两项差小于15则选C;其他情况则选D;
   程序的部分代码已给出,请把xllzki()补充完整,并只提交该部分代码。

#include <stdio.h>
#include <string.h>
#include <math.h>
int max(int a,int b)
{
    return a>b?a:b;
}
int min(int a,int b)
{
    return a<b?a:b;
}
int xllzki(int lena,int lenb,int lenc,int lend,char ans)
{
    int a[4],i,j;
    a[0]=lena,a[1]=lenb,a[2]=lenc,a[3]=lend;
    /*
       补充并提交该部分代码 
    */
}
int main()
{
    int i,tol=0;
    int lena,lenb,lenc,lend;
    int N;
    char ans;
    scanf("%d",&N);
    for(i=0; i<N; i++)
    {
        scanf("%d%d%d%d %c%*c",&lena,&lenb,&lenc,&lend,&ans);
        if(xllzki(lena,lenb,lenc,lend,ans))
            tol++;
    }
    printf("%.2f\n",1.0*tol/N*25);
    return 0;
}

输入:

首先输入一个数字N,代表XLL记得的题的个数(N<=25),接下来第二行到第N+1行,每行输入四个正整数
和一个大写英文字母(A,B,C,D),四个整数表示A,B,C,D四个选项的长度(长度<80),大写字母表示XLL
的答案。

输出:

输出25个听力题XLL的正确率(N个中的正确数/N*25),结果保留两位小数。

示例输入:

3
75 30 30 30 A
46 45 47 12 C
45 45 45 45 D

示例输出:

16.67

提示:

参考答案(内存最优[1092]):


#include <stdio.h>
#include <string.h>
#include <math.h>
int max(int a,int b)
{
    return a>b?a:b;
}
int min(int a,int b)
{
    return a<b?a:b;
}
int xllzki(int lena,int lenb,int lenc,int lend,char ans)
{
    int a[4],i,j;
    a[0]=lena,a[1]=lenb,a[2]=lenc,a[3]=lend;
 for(i=0; i<3; i++)
        for(j=0; j<4-i-1; j++)
        {
            if(a[j]>a[j+1])
            {
                int tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    if(a[2]<=45&&a[3]-a[2]>=25)     //三短一长选最长
    {
        if(a[3]-lena==0)
            return 'A'==ans?1:0;
        else if(a[3]-lenb==0)
            return 'B'==ans?1:0;
        else if(a[3]-lenc==0)
            return 'C'==ans?1:0;
        else if(a[3]-lend==0)
            return 'D'==ans?1:0;
    }
    else if(a[1]>=45&&a[1]-a[0]>=25)    //三长一短选最短
    {
        if(a[0]-lena==0)
            return 'A'==ans?1:0;
        else if(a[0]-lenb==0)
            return 'B'==ans?1:0;
        else if(a[0]-lenc==0)
            return 'C'==ans?1:0;
        else if(a[0]-lend==0)
            return 'D'==ans?1:0;
    }
    else if(a[3]-a[0]<15&&a[0]>45) //同长为A
    {
        return 'A'==ans?1:0;
    }
    else if(a[3]-a[0]<15&&a[3]<45)  //同短为C
    {
        return 'C'==ans?1:0;
    }
    else return 'D'==ans?1:0;
}
int main()
{
    int i,tol=0;
    int lena,lenb,lenc,lend;
    int N;
    char ans;
    scanf("%d",&N);
    for(i=0; i<N; i++)
    {
        scanf("%d%d%d%d %c%*c",&lena,&lenb,&lenc,&lend,&ans);
        if(xllzki(lena,lenb,lenc,lend,ans))
            tol++;
    }
    printf("%.2f\n",1.0*tol/N*25);
    return 0;
}

参考答案(时间最优[0]):


#include <stdio.h>
#include <string.h>
#include <math.h>
int max(int a,int b)
{
    return a>b?a:b;
}
int min(int a,int b)
{
    return a<b?a:b;
}
int xllzki(int lena,int lenb,int lenc,int lend,char ans)
{
    int a[4],i,j;
    a[0]=lena,a[1]=lenb,a[2]=lenc,a[3]=lend;
    for(i=0; i<3; i++)
        for(j=0; j<4-i-1; j++)
        {
            if(a[j]>a[j+1])
            {
                int tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    if(a[2]<=45&&a[3]-a[2]>=25)     //三短一长选最长
    {
        if(a[3]-lena==0)
            return 'A'==ans?1:0;
        else if(a[3]-lenb==0)
            return 'B'==ans?1:0;
        else if(a[3]-lenc==0)
            return 'C'==ans?1:0;
        else if(a[3]-lend==0)
            return 'D'==ans?1:0;
    }
    else if(a[1]>=45&&a[1]-a[0]>=25)    //三长一短选最短
    {
        if(a[0]-lena==0)
            return 'A'==ans?1:0;
        else if(a[0]-lenb==0)
            return 'B'==ans?1:0;
        else if(a[0]-lenc==0)
            return 'C'==ans?1:0;
        else if(a[0]-lend==0)
            return 'D'==ans?1:0;
    }
    else if(a[3]-a[0]<15&&a[0]>45) //同长为A
    {
        return 'A'==ans?1:0;
    }
    else if(a[3]-a[0]<15&&a[3]<45)  //同短为C
    {
        return 'C'==ans?1:0;
    }
    else return 'D'==ans?1:0;

}
int main()
{
    int i,tol=0;
    int lena,lenb,lenc,lend;
    int N;
    char ans;
    scanf("%d",&N);
    for(i=0; i<N; i++)
    {
        scanf("%d%d%d%d %c%*c",&lena,&lenb,&lenc,&lend,&ans);
        if(xllzki(lena,lenb,lenc,lend,ans))
            tol++;
    }
    printf("%.2f\n",1.0*tol/N*25);
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注