算法竞赛入门【码蹄集新手村600题】(MT1160-1180)C语言(三)

简介: 算法竞赛入门【码蹄集新手村600题】(MT1160-1180)C语言(三)

MT1175 网球比赛

(1)题目

两个网球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三对赛手的名单。


格式

输入格式: 
输出格式: 
分3行输出,见样例

样例1

输入格式: 
输出格式:
a with z
b with x
c with y

(2)参考代码

#include<stdio.h>
int main() 
{ 
    char a[2][3] = {{'a', 'b', 'c'}, {'x', 'y', 'z'}};
    for (int i=3;i<=3;i++)
    {
        for (int j=1;i<=3;j++)
        {
            for (int k=2;k<=2;k++)
            {
                if (i != j && j != k && i != k)
                {
                    printf("%c with %c\n", a[0][0], a[1][i-1]);
                    printf("%c with %c\n", a[0][1], a[1][j-1]);
                    printf("%c with %c", a[0][2], a[1][k-1]);
                    return 0;
                }
            }
        }
    }
    return 0; 
}

MT1176 两个点的距离

(1)题目

给定笛卡尔平面上两个点的坐标,求它们之间的距离向上舍入为最接近的整数。


格式

输入格式:
输入整型,空格分隔
输出格式:
输出整型

样例1

输入:
0 0 2 -2
输出:
3

(2)参考代码

#include<stdio.h>
#include<math.h>
int main() 
{ 
    int x1, x2, y1, y2;
    scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    // printf("%.0lf\n", sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)));
    int sum = pow(x1 - x2, 2) + pow(y1 - y2, 2);
    int num = sqrt(sum);
    if (num * num == sum)
    {
        printf("%d\n", num);
    }
    else
    {
        printf("%d\n", num + 1);
    }
    return 0; 
}

MT1177 三角形

(1)题目

输入三角形的三个顶点坐标,和点N的坐标。判断N是否位于三角形内,输出YES或者NO。


格式

输入格式: 
第一行输入三角形的三个顶点坐标(x1,y1) , (x2,y2)和(x3,y3),第二行输入点N的坐标,整型,空格分隔。
输出格式:
 输出YES或者NO

样例1

输入格式:
0 0 20 0 10 30
10 15
输出格式: 
YES

(2)参考代码

#include<stdio.h>
#include<math.h>
int main() 
{ 
    int x1, y1, x2, y2, x3, y3;
    int xN, yN;
    scanf("%d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x3, &y3);
    scanf("%d %d", &xN, &yN);
    double S, S1, S2, S3;
    S = (double)(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2) * 0.5;
    S1 = (double)(x1*yN+xN*y3+x3*y1-x1*y3-xN*y1-x3*yN) * 0.5;
    S2 = (double)(xN*y2+x2*y3+x3*yN-xN*y3-x2*yN-x3*y2) * 0.5;
    S3 = (double)(x1*y2+x2*yN+xN*y1-x1*yN-x2*y1-xN*y2) * 0.5;
    if (S < 0 || S1 < 0 || S2 < 0 || S3 < 0)
    {
        S = sqrt(S * S);
        S1 = sqrt(S1 * S1);
        S2 = sqrt(S2 * S2);
        S3 = sqrt(S3 * S3);
    }
    if (S < S1 + S2 + S3)
    {
        printf("NO");
    }
    else if (S == S1 + S2 + S3)
    {
        printf("YES");
    }
    return 0; 
}

MT1178 点与线段的关系

(1)题目

输入线段的2个端点的坐标值x和y,再输入第3个点的坐标,判断点在不在线段上,输出YES或者NO。


格式

输入格式:
按照先起点(x,y)再终点(x,y)的次序。第二行输入第3个点的坐标。坐标整型。第一行两点之间空格,如样例所示。
输出格式:
输出YES或者NO

样例1

输入:
(-20,20) (-20,-10)
(0,0) 
输出:
NO

(2)参考代码

#include<stdio.h>
#include<math.h>
int main() 
{ 
    double x1, y1, x2, y2, a, b;
    scanf("(%lf,%lf) (%lf,%lf) \n (%lf,%lf)", &x1, &y1, &x2, &y2, &a, &b);
    double xy = sqrt(pow(x1 - x2, 2.0) + pow(y1 - y2, 2.0));
    double xy1 = sqrt(pow(x1 - a, 2.0) + pow(y1 - b, 2.0));
    double xy2 = sqrt(pow(x2 - a, 2.0) + pow(y2 - b, 2.0));
    if (xy1 + xy2 == xy)
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    return 0; 
}

MT1179 线段与线段的关系

(1)题目

输入2个线段的端点的坐标值x和y,判断两条线是否为平行线。输出YES或者NO。另:不考虑共线情况。


格式

输入格式:
 输入整型,空格分隔。按照先起点(x,y),空格,再终点(x,y)的次序。每行一个线段的信息。
输出格式: 
输出YES或者NO

样例1

输入格式:
(-20,20) (-20,-10)
(0,0) (5,0)
输出格式: 
NO

(2)参考代码

#include<stdio.h>
// #include<math.h>
int main() 
{ 
    int x1, y1, x2, y2;
    int x3, y3, x4, y4;
    scanf("(%d,%d) (%d,%d)\n", &x1, &y1, &x2, &y2);
    scanf("(%d,%d) (%d,%d)", &x3, &y3, &x4, &y4);
    // if ((x1 == x2 && x3 == x4) || (y1 == y2 && y3 == y4))
    // {
    //     printf("YES");
    //     return 0;
    // }
    // double tan1, tan2;
    // tan1 = sqrt(pow((double)(y2 - y1), 2.0)) / sqrt(pow((double)(x2 - x1), 2.0));
    // tan2 = sqrt(pow((double)(y4 - y3), 2.0)) / sqrt(pow((double)(x4 - x3), 2.0));
    // if (tan1 == tan2)
    // {
    //     printf("YES");
    // }
    // else
    // {
    //     printf("NO");
    // }
    if (x1 == x2 && x3 == x4 || y1 == y2 && y3 == y4)
    {
        printf("YES");
    }
    else if ((y2 - y1) / (x2 - x1) == (y4 - y3) / (x4 - x3))
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    return 0; 
}

MT1180 两条线段

(1)题目

输入2个线段的端点的坐标值x和y (x,y不重合),判断两条线段是否交叉,输出YES或者NO。


格式

输入格式: 
输入整型,空格分隔。按照先起点(x,y),空格,再终点(x,y))的次序。每行一个线段的信息。
输出格式: 
输出YES或者NO

样例1

输入格式:
(-20,20) (-20,-10)
(0,0) (5,0)
输出格式:
 NO

(2)参考代码

//#include<stdio.h>
// int main() 
// { 
//     int x1, y1, x2, y2;
//     int x3, y3, x4, y4;
//     scanf("(%d,%d) (%d,%d)/n", &x1, &y1, &x2, &y2);
//     scanf("(%d,%d) (%d,%d)", &x3, &y3, &x4, &y4);
//     if (x1 == x2 && x3 == x4 || y1 == y2 && y3 == y4)
//     {
//         printf("NO");
//     }
//     else if ((y2 - y1) / (x2 - x1) == (y4 - y3) / (x4 - x3))
//     {
//         printf("NO");
//     }
//     else
//     {
//         printf("YES");
//     }
//     return 0; 
// }
目录
相关文章
|
4天前
|
机器学习/深度学习 算法 C语言
【C言专栏】递归算法在 C 语言中的应用
【4月更文挑战第30天】本文介绍了递归算法在C语言中的应用,包括基本概念(通过调用自身解决子问题)、特点(调用自身、终止条件、栈空间)和实现步骤(定义递归函数、分解问题、设置终止条件、组合解)。文中通过阶乘计算和斐波那契数列两个案例展示了递归的使用,强调了递归可能导致的栈溢出问题及优化需求。学习递归有助于理解和应用“分而治之”策略。
|
6天前
|
存储 机器学习/深度学习 算法
|
8天前
|
算法 索引
数据结构与算法-最短路径基础入门
数据结构与算法-最短路径基础入门
6 0
|
8天前
|
算法 索引
数据结构与算法-最小生成树入门
数据结构与算法-最小生成树入门
14 0
|
8天前
|
算法
数据结构与算法-图论的基础入门
数据结构与算法-图论的基础入门
6 0
|
8天前
|
算法 索引
数据结构与算法-排序进阶入门
数据结构与算法-排序进阶入门
7 0
|
8天前
|
算法
数据结构与算法-AVL树入门
数据结构与算法-AVL树入门
12 0
|
8天前
|
算法 索引
数据结构与算法-三种队列基础入门
数据结构与算法-三种队列基础入门
8 0
|
8月前
|
算法 C语言
算法竞赛入门【码蹄集新手村600题】(MT1240-1260)C语言(二)
算法竞赛入门【码蹄集新手村600题】(MT1240-1260)C语言(二)
154 0
|
8月前
|
算法 C语言
算法竞赛入门【码蹄集新手村600题】(MT1240-1260)C语言(一)
算法竞赛入门【码蹄集新手村600题】(MT1240-1260)C语言
162 0