蓝桥杯专题-试题版-【龟兔赛跑预测】【回形取数】【阶乘计算】【矩形面积交】

  • 点击跳转专栏=>Unity3D特效百例
  • 点击跳转专栏=>案例项目实战源码
  • 点击跳转专栏=>游戏脚本-辅助自动化
  • 点击跳转专栏=>Android控件全解手册
  • 点击跳转专栏=>Scratch编程案例
  • 点击跳转=>软考全系列
  • 点击跳转=>蓝桥系列

关于作者

专注于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/
这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气,日后定有一番大作为!!!旁边有点赞收藏今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

你可能感兴趣的:(蓝桥全系列,蓝桥杯,android,职场和发展,真题讲解,认证考试)