专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
需要所有整理的文档可底部卡片联系我,直接发压缩包。
问题描述
话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。
然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
输入格式
输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2<=100;t<=300;s<=10;l<=10000且为v1,v2的公倍数)
输出格式
输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。
样例输入
10 5 5 2 20
样例输出
D
4
样例输入
10 5 5 1 20
样例输出
R
3
样例输入
10 5 5 3 20
样例输出
T
4
#include
int main()
{
int v1, v2, t, s, l;
scanf("%d%d%d%d%d", &v1, &v2, &t, &s, &l);
int i, t1 = 0, t2 = l / v2;
int s1 = 0, s2 = 0;
for (i = 1; i <= t2; i++)
{
s2 += v2;
if (t1 < i)
{
t1 = i;
s1 += v1;
}
if (s1 == l)
break;
if (t1 == i && s1 - s2 >= t)
t1 += s;
}
if (s1 == l && s2 == l)
printf("D\n%d", t2);
else if (s1 == l)
printf("R\n%d", t1);
else
printf("T\n%d", t2);
return 0;
}
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
#include
int main()
{
int i, j, m, n;
int a[200][200];
scanf("%d%d", &m, &n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
for (i = 0; i < (n + 1) / 2 && i < (m + 1) / 2; i++)
{
for (j = i; j < m - i; j++)
printf("%d ", a[j][i]);
for (j = i + 1; j < n - i; j++)
printf("%d ", a[m - i - 1][j]);
if (n - i - 1 > i)
for (j = m - i - 2; j >= i; j--)
printf("%d ", a[j][n - i - 1]);
if (m - i - 1 > i)
for (j = n - i - 2; j > i; j--)
printf("%d ", a[i][j]);
}
return 0;
}
问题描述
输入一个正整数n,输出n!的值。
其中n!=123*…*n。
算法描述
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式
输入包含一个正整数n,n<=1000。
输出格式
输出n!的准确值。
样例输入
10
样例输出
3628800
#include
int calc(char* p, int len, int n, char* q)
{
int i, j = 0, m = 0;
for (i = 0; i < len; i++)
{
m += p[i] * n;
q[j++] = m % 10;
m /= 10;
}
while (m > 0)
{
q[j++] = m % 10;
m /= 10;
}
return j;
}
void print(char* p, int len)
{
int i = len - 1;
while (i >= 0) printf("%d", p[i--]);
}
int main()
{
int i, j = 0, k = 1, n;
char s1[3000], s2[3000] = {1};
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
if (j > 0)
{
k = calc(s1, j, i, s2);
j = 0;
}
else
{
j = calc(s2, k, i, s1);
k = 0;
}
}
if (j > 0)
print(s1, j);
else
print(s2, k);
return 0;
}
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
#include
double dabs(double a)
{
return a > 0 ? a : -a;
}
int in(double x, double y, double* a)
{
return (((x >= a[0] && x <= a[2] || x <= a[0] && x >= a[2]) &&
(y >= a[1] && y <= a[3] || y <= a[1] && y >= a[3])) ? 1 : 0);
}
double part(double a, double b, double c, double d)
{
return ((a > c && a < d || a < c && a > d) ? a : b);
}
int count(double* a, double* b, int* c)
{
c[0] = in(a[0], a[1], b);
c[1] = in(a[0], a[3], b);
c[2] = in(a[2], a[3], b);
c[3] = in(a[2], a[1], b);
return c[0] + c[1] + c[2] + c[3];
}
int one(int* a)
{
return (a[0] ? 0 : a[1] ? 1 : a[2] ? 2 : 3);
}
int rone(int* a)
{
return (a[3] ? 3 : a[2] ? 2 : a[1] ? 1 : 0);
}
double mixed1(int* a, int* b, double* c, double* d)
{
return dabs((c[one(a) < 2 ? 0 : 2] - d[one(b) < 2 ? 0 : 2]) *
(c[one(a) % 3 == 0 ? 1 : 3] - d[one(b) % 3 == 0 ? 1 : 3]));
}
double mixed2(int* a, double* b, double* c)
{
return dabs((one(a) / 2 == rone(a) / 2)
? (b[1] - b[3]) * (b[one(a) / 2 * 2] - part(c[0], c[2], b[0], b[2]))
: (b[0] - b[2]) * (b[one(a) % 3 == 0 ? 1 : 3] - part(c[1], c[3], b[1], b[3])));
}
double mixed4(double* a)
{
return dabs((a[0] - a[2]) * (a[1] - a[3]));
}
int main()
{
int i, j;
double coords[2][4];
for (i = 0; i < 2; i++)
for(j = 0; j < 4; j++)
scanf("%lf", &coords[i][j]);
int in[2][4];
int a = count(coords[0], coords[1], in[0]);
int b = count(coords[1], coords[0], in[1]);
double mixed = 0;
if (a == 1) {
mixed = mixed1(in[0], in[1], coords[0], coords[1]);
} else if (a == 2) {
mixed = mixed2(in[0], coords[0], coords[1]);
} else if (a == 4) {
mixed = mixed4(coords[0]);
} else if (b == 2) {
mixed = mixed2(in[1], coords[1], coords[0]);
} else if (b == 4) {
mixed = mixed4(coords[1]);
}
printf("%.2lf", mixed);
return 0;
}
作者:小空和小芝中的小空
转载说明-务必注明来源:https://zhima.blog.csdn.net/
这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气,日后定有一番大作为!!!旁边有点赞收藏今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。