作业三--多样例

发布于:2022-10-16 ⋅ 阅读:(442) ⋅ 点赞:(0)

虽然作业三有一些难度,但是当我们努力做完之后再来回顾,其实也还好。

World Cup

首先这个题目难在读懂题意。题意的理解可以参考:赔率与概率 - 知乎

在读懂了题目之后,这个题目就比较简单啦!

 A+B I

这个题目是比较简单的,直接根据题目来写就好啦。

#include <stdio.h>

int main()
{
    int k;
    scanf("%d",&k);
    while(k--){
        int a,b,c;
        scanf("%d+%d=%d",&a,&b,&c);
        if(a+b==c) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
 }

比例

这个题目是一个数学题目哦,可以做辅助线AG、CG,然后再通过三角形的等面积法来求比例。

#include <stdio.h>
#include <math.h>
int gcd(int a,int b){
    return b?gcd(b,a%b):a;
}
int main(){
    int k;
    scanf("%d",&k);
    while(k--){
        int a,b,c,d,e,f;
        scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
        int x1=a*c*f+a*c*e;
        int x2=f*a*d+f*b*d;
        int y=gcd(x1,x2);
        printf("%d %d\n",x1/y,x2/y);
    }
    return 0;
}

区间相交

这个题目正难则反!可以通过排除不相交来做哦。

#include <stdio.h>
#include <math.h>
int main(){
    int k;
    scanf("%d",&k);
    while(k--){
        int x1,y1,x2,y2;
        scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
        //正难则反
        if(y1<x2||y2<x1) printf("No\n");
        else printf("Yes\n"); 
    }
    return 0;
}

勾股数

这个题目不能用浮点数来求哦,会有浮点数精度的问题,然后不能直接从1开始暴力枚举,应该运用三角形三边的性质,两边之和大于第三边,两边之差小于第三边。通过枚举第三边就可以啦。

#include <stdio.h>
#include <math.h>
int main(){
    int k;
    scanf("%d",&k);
    while(k--){
        int x,y,flag=0;
        scanf("%d%d",&x,&y);
        //勾股数来自于三角形 因此另一个勾股数的取值范围是 abs(x-y) ~ x+y;
        for(int i=abs(x-y)+1;i<(x+y);i++){
            if((x*x+y*y==i*i)||(i*i+x*x==y*y)||(i*i+y*y==x*x)){
                flag=1;
                printf("%d\n",i);
                break;
            }
        }
        if(!flag) printf("None\n");  
    }
    return 0;
}

Alice and Bob

这个题目的妙处就是巧用除法来求能被m整除的数的个数哦。还有要注意要用__int64,因为18位数会溢出int的哦。然后注意一个特殊的就是任何数都能整除0,因此一位数时要特判,多加1。

#include<stdio.h>
#include<math.h>
int main()
{
    __int64 sum,x,y,t;
    int n,a,b,l;
    scanf("%d",&n);
    while(n--){
        scanf("%d %d",&a,&b);
            if(a==1){
                sum=9/b+1;
                printf("%I64d\n",sum);
            }else{
                t=1;
            for(l=a;l>1;l--){
                t=t*10;
            }
            x=(t-1)/b,y=(t*10-1)/b,sum=y-x;
            printf("%I64d\n",sum);
    }
    }
    return 0;
}

三角形

这个题目要注意的就是给你的三边不一定是按照顺序来给的哦。因此在判断之前排一个序就可以了哦。

#include <stdio.h>
#include <math.h>
int main(){
    int k;
    scanf("%d",&k);
    while(k--){
        int a,b,c,d,e,f,t;
        scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
        if(a<b){t=a;a=b;b=t;}
        if(a<c){t=a;a=c;c=t;}
        if(b<c){t=b;b=c;c=t;}
        if(d<e){t=d;d=e;e=t;}
        if(d<f){t=d;d=f;f=t;}
        if(e<f){t=e;e=f;f=t;}
        if(!(a*e-d*b)&&!(b*f-c*e)) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

希望大家能够好好吸收作业三中的一些思维和细节!其中最大公因数的求法是一定会考的哦。同时数学类的几何题目也是很容易考的,有的时候谢大还喜欢考圆中的几何知识。因此希望大家好好掌握。

本文含有隐藏内容,请 开通VIP 后查看