图书租借网站 开发,网页设计与制作视频,网站设计团队分工,wordpress 授权协议算法竞赛入门【码蹄集新手村600题】(MT1160-1180#xff09;C语言 目录MT1161 N的零MT1162 数组最大公约数MT1163 孪生质数MT1164 最大数字MT1165 卡罗尔数MT1166 自守数MT1167自守数IIMT1168 阶乘数MT1169 平衡数MT1170 四叶玫瑰数MT1171 幻数MT1172 完美数字MT1173 魔数MT11… 算法竞赛入门【码蹄集新手村600题】(MT1160-1180C语言 目录MT1161 N的零MT1162 数组最大公约数MT1163 孪生质数MT1164 最大数字MT1165 卡罗尔数MT1166 自守数MT1167自守数IIMT1168 阶乘数MT1169 平衡数MT1170 四叶玫瑰数MT1171 幻数MT1172 完美数字MT1173 魔数MT1174 A的B次方MT1175 网球比赛MT1176 两个点的距离MT1177 三角形MT1178 点与线段的关系MT1179 线段与线段的关系MT1180 两条线段 码蹄集网站地址https://www.matiji.net/exam/ojquestionlist 目录
MT1161 N的零
1题目 输入正整数N将N的所有零转换为5。没有0就原样输出。不考虑不合理的输入等特殊情况。 格式
输入格式
输入正整数N输出格式
输出整型样例1
输入
5002输出
55522参考代码
#includestdio.h
#includestring.h
int main()
{ char a[100];scanf(%s, a);for (int i0;istrlen(a);i){if (a[i] 0){a[i] 5;}}printf(%s, a);return 0;
}MT1162 数组最大公约数
1题目 给定一个由N个正整数组成的数组求所有数组元素的最大公约数。 格式
输入格式:
第一行输入数组长度N第二行输入数组元素整型空格分隔。输出格式:
输出整型样例1
输入格式:
3
2 4 6输出格式:22参考代码
#includestdio.h
int main()
{ int N;scanf(%d, N);int a[N];for (int i0;iN;i){scanf(%d, a[i]);}int min a[0], flag;for (int i0;iN;i){if (min a[i]){min a[i];}}for (int imin;i1;i--){flag 1;for (int j0;jN;j){if (a[j] % i ! 0){flag 0;break;}}if (flag 1){printf(%d, i);break;}}return 0;
}MT1163 孪生质数
1题目 在质数中若两个质数之差为2,我们称之为孪生质数,例如3、55、7输入2个正整数判断他是不是孪生质数输出YES或者NO。 格式
输入格式
输入整型输出格式
输出YES或者NO样例1
输入
2 6输出
NO2参考代码
#includestdio.h
int main()
{int a, b;scanf(%d %d, a, b);if ((b - a 2 || a - b 2) (a ! 0 b ! 0) (a ! 1 b ! 1)){for (int i2;ia;i){if (a % i 0){printf(NO);return 0;}for (int i2;ib;i){if (b % i 0){printf(NO);return 0;}}}}else{printf(NO);return 0;}printf(YES);return 0;
}MT1164 最大数字
1题目 输入正整数N找到小于或等于它的最大数字并且其数字从高位到低位是非递减的顺序。 格式
输入格式:输入正整数N输出格式:
输出整型样例1
输入格式:
200输出格式:
1992参考代码
#includestdio.h
int main()
{ int n;scanf(%d, n);int temp n, min temp % 10, flag 1;while (temp){if (temp % 10 min){min temp % 10;}else{flag 0;}temp / 10;}if (flag 1){printf(%d, n);}else{for (int in;i0;i--){temp i;flag 1;min temp % 10;while (temp){if (temp % 10 min){min temp % 10;}else{flag 0;}temp / 10;}if (flag 1){printf(%d, i);break;}}}return 0;
}MT1165 卡罗尔数
1题目 卡罗尔数是其值满足4n-2 (n1) -1的整数(n为正整数)。输入正整数N判断它是不是卡罗尔数输出YES或者NO。 格式
输入格式:
输入正整数N输出格式:
输出YES或者NO样例1
输入格式:
1输出格式:
YES2参考代码
#includestdio.h
int main()
{ int N, num;scanf(%d, N);for (int i2;;i){num 2 * i - 3;if (num N){printf(YES);break;}else if (num N){printf(NO);break;}}return 0;
}MT1166 自守数
1题目 输入正整数N (N10)判断该数是否为自守数输出YES或者NO。当且仅当一个数的平方以与该数相同的数字结尾时该数称为自守数。 格式
输入格式:
输入正整数N输出格式:
输出YES或者NO样例1
输入格式:5输出格式:
YES2参考代码
#includestdio.h
int main()
{ int N, n, temp_N, temp_n;scanf(%d, N);int temp N, count 0;n N * N;while (temp){temp / 10;count;}for (int i0;icount;i){temp_N N % 10;temp_n n % 10;if (temp_N ! temp_n){printf(NO);return 0;}N / 10;n / 10;}printf(YES);return 0;
}MT1167自守数II
1题目 输入正整数N检查该数是否为自守数输出YES或者NO。当且仅当一个数的平方以与该数相同的数字结尾时该数称为自守数。 格式
输入格式
输入正整数N输出格式
输出YES或者NO样例1
输入
76输出
YES2参考代码
#includestdio.h
int main()
{ int N;scanf(%d, N);int NN N * N;while (N){if (N % 10 ! NN % 10){printf(NO);return 0;}N N / 10;NN NN / 10;}printf(YES);return 0;
}MT1168 阶乘数
1题目 输入正整数N找出它是否是一个等于其他数的阶乘值的数输出YES或者NO。 格式
输入格式
输入正整数N输出格式
输出YES或者NO样例1
输入
5输出
NO2参考代码
#includestdio.h
int main()
{ int N, num 1, i;scanf(%d, N);// for (i1;iN;i)// {// num * i;// if (num N)// {// printf(YES);// return 0;// }// }for (i1;i(N/2)1;i){num * i;if (num N){printf(YES);return 0;}}printf(NO);return 0;
}MT1169 平衡数
1题目 输入一个正整数它有N位数N是大于1的奇数判断它是不是平衡数。如果左侧的所有数字和等于右侧的所有数字之和则称为平衡数。不考虑不合理的输入等特殊情况。 格式
输入格式:
输入正整数N输出格式:
输出YES或者NO样例1
输入格式:
1234006输出格式:
YES2参考代码
#includestdio.h
int main()
{ int N;scanf(%d, N);int temp N, count 0, sum1 0, sum2 0;while (temp){temp / 10;count;}if (count 1){printf(YES);}else{for (int i1;icount;i){if (i (count - 1) / 2 1){sum1 N % 10;}else if (i (count - 1) / 2 1){sum2 N % 10;}N / 10;}}if (sum1 sum2){printf(YES);}else{printf(NO);}return 0;
}MT1170 四叶玫瑰数
1题目 输入正整数N判断它是不是一个四叶玫瑰数输出YES或者NO。四位玫瑰数是4位数的自幂数它的每个位上的数字的4次幂之和等于它本身。 格式
输入格式
输入正整数N输出格式
输出YES或者NO样例1
输入
1634输出
YES2参考代码
#includestdio.h
#includemath.h
int main()
{ int N, sum 0;scanf(%d, N);int temp N;while (temp){sum pow((double)(temp % 10), 4.0);temp / 10;}if (N sum (N 1000 N 9999)){printf(YES);}else{printf(NO);}return 0;
}MT1171 幻数
1题目 一个数字把他的各位数累加会得到一个新的数字再把这个新数字的每一位加起来重复这个过程直到只剩下一位数字如果最后剩下的数字是1就称原数为一个幻数。输入正整数N检查它是否是一个幻数输出YES或者NO。 格式
输入格式
输入正整数N输出格式
输出YES或者NO样例1
输入
1234输出
YES2参考代码
#includestdio.h
int LeiJia(int num)
{int sum 0;while (num){sum num % 10;num / 10;}return sum;
}
int main()
{ int N;scanf(%d, N);while (N 10){N LeiJia(N);}if (N 1){printf(YES);}else{printf(NO);}return 0;
}MT1172 完美数字
1题目 输入正整数N检查它是否完美输出YES或者NO。把一个数字的每一位拆分开计算他们的阶乘再累加如果和等于原数字则该数字是完美的。 格式
输入格式
输入正整数N输出格式
输出YES或者NO
样例1
输入
145输出
YES2参考代码
#includestdio.h
int main()
{ int N, i;scanf(%d, N);int num, sum 0, temp N;while (temp){num 1;for (i1;itemp%10;i){num * i;}sum num;temp / 10;}if (sum N){printf(YES);}else{printf(NO);}return 0;
}MT1173 魔数
1题目 一个数字把他乘以二会得到一个新的数字如果这个新数字依然由原数中那些数字组成就称原数为一个魔数。输入正整数N检查它是否是一个魔数输出YES或者NO。 格式
输入格式
输入正整数N输出格式
输出YES或者NO样例1
输入
142857输出
YES2参考代码
#includestdio.h
int main()
{ int N;scanf(%d, N);int temp1, temp2 N / 2, flag;while (temp2){temp1 N;flag 0;while (temp1){if (temp1 % 10 temp2 % 10){flag 1;}temp1 / 10;}if (flag ! 1){printf(NO);return 0;}temp2 / 10;}printf(YES);return 0;
}MT1174 A的B次方
1题目 输入正整数N判断它是否可以表示为A的B次方其中B1A0都是整数。输出YES或者NO。 格式
输入格式
输入正整数N输出格式
输出YES或者NO样例1
输入
6输出
NO2参考代码
#includestdio.h
#includemath.h
int main()
{int N, i, j;scanf(%d, N);for (i 1; i sqrt(N) 1; i){for (j 2; j sqrt(N) 1; j){if (pow(i, j) N){printf(YES);return 0;}}}printf(NO);return 0;
}MT1175 网球比赛
1题目 两个网球队进行比赛各出三人。甲队为a,b,c三人乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比c说他不和x,z比请编程序找出三对赛手的名单。 格式
输入格式:
无输出格式:
分3行输出见样例样例1
输入格式:
无输出格式:
a with z
b with x
c with y2参考代码
#includestdio.h
int main()
{ char a[2][3] {{a, b, c}, {x, y, z}};for (int i3;i3;i){for (int j1;i3;j){for (int k2;k2;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输出
32参考代码
#includestdio.h
#includemath.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) , (x2y2和(x3y3)第二行输入点N的坐标整型空格分隔。输出格式:输出YES或者NO样例1
输入格式:
0 0 20 0 10 30
10 15输出格式:
YES2参考代码
#includestdio.h
#includemath.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*y2x2*y3x3*y1-x1*y3-x2*y1-x3*y2) * 0.5;S1 (double)(x1*yNxN*y3x3*y1-x1*y3-xN*y1-x3*yN) * 0.5;S2 (double)(xN*y2x2*y3x3*yN-xN*y3-x2*yN-x3*y2) * 0.5;S3 (double)(x1*y2x2*yNxN*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) 输出
NO2参考代码
#includestdio.h
#includemath.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)输出格式:
NO2参考代码
#includestdio.h
// #includemath.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)输出格式:NO2参考代码
//#includestdio.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;
// }