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; // }