C语言练习题110例(十)

时间:2024-02-01 12:38:14

91.杨辉三角

题目描述:

KK知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他

解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。

输入描述:

第一行包含一个整数数n。 (1≤n≤30)

输出描述:

包含n行,为杨辉三角的前n行,每个数输出域宽为5。

输入:

6

输出:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

参考代码:

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int j = 0;
    int arr[30][30] = { 0 };
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <= i; j++)
        {
            if (i == j)
            {
                arr[i][j] = 1;
            }
            if (j == 0)
            {
                arr[i][j] = 1;
            }
            if (i > 1 && j > 0)
            {
                arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
            }
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <= i; j++ )
        {
            printf("%5d", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

92.井字棋

题目描述:

KK和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。

输入描述:

三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。

输出描述:

如果KK获胜,输出“KK wins!”;

如果BoBo获胜,输出“BoBo wins!”;

如果没有获胜,输出“No winner!”。

输入:

K O B

O K B

B O K

输出:

KK wins!

参考代码:

#include <stdio.h>

int main()
{
    int i = 0;
    int j = 0;
    int arr[3][3] = { 0 };
    char flag = 'O';
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            scanf(" %c", &arr[i][j]);
        }
    }

    for (i = 0; i < 3; i++)
    {
        if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])
        {
            flag = arr[i][1];
            break;
        }
        if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])
        {
            flag = arr[1][i];
            break;
        }
        if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])
        {
            flag = arr[1][1];
            break;
        }
        if (arr[0][2] == arr[1][1] && arr[1][1] == arr[0][0] )
        {
            flag = arr[1][1];
            break;
        }

    }
    if (flag == 'K')
        printf("KK wins!\n");
    else if (flag == 'B')
        printf("BOBO wins!\n");
    else
        printf("No winn\n");
    return 0;
}

93.小乐乐与进制转换

题目描述:

输入一个正整数n (1 ≤ n ≤ 109)

输入描述:

输出一行,为正整数n表示为六进制的结果

输出描述:

示例1

输入:

6

输出:

10

示例2

输入:

120

输出:

320

参考代码:

#include <stdio.h>

int main()
{
    int n = 0;
    int i = 0;
    scanf("%d", &n);
    int arr[20] = { 0 };
    while (n)
    {
        arr[i++] = n % 6;
        n /= 6;
    }

    for (i--; i >= 0; i-- )
    {
        printf("%d", arr[i]);
    }
    return 0;
}

94.小乐乐求和

题目描述:

小乐乐最近接触了求和符号Σ,他想计算外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传的结果。但是小乐乐很笨,请你帮助他解答。

输入描述:

输入一个正整数n (1 ≤ n ≤ 109)

输出描述:

输出一个值,为求和结果。

输入:

10

输出:

55

参考代码:

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    int sum = 0;
    int i = 0;
    for (i = 1; i <= n; i++)
    {
        sum += i;
    }
    printf("%d\n", sum);
    return 0;
}

95.小乐乐定闹钟

题目描述:

小乐乐比较懒惰,他现在想睡觉,然后再去学习。他知道现在的时刻,以及自己要睡的时长,想设定一个闹钟叫他起床学习,但是他太笨了,不知道应该把闹钟设定在哪个时刻,请你帮助他。(只考虑时和分,不考虑日期)

输入描述:

输入现在的时刻以及要睡的时长k(单位:minute),中间用空格分开。输入格式:hour:minute k(如hour或minute的值为1,输入为1,而不是01)(0 ≤ hour ≤ 23,0 ≤ minute ≤ 59,1 ≤ k ≤ 109)

输出描述:

对于每组输入,输出闹钟应该设定的时刻,输出格式为标准时刻表示法(即时和分都是由两位表示,位数不够用前导0补齐)。

示例1

输入:

0:0 100

输出:

01:40

示例2

输入:

1:0 200

输出:

04:20

参考代码:

#include <stdio.h>

int main()
{
    int k = 0;
    int hour = 0;
    int minute = 0;
    scanf("%d:%d %d", &hour, &minute, &k);
    hour = k / 60 + hour;
    minute = k % 60;
    printf("%02d:%02d", hour, minute);
    return 0;
}

96.小乐乐排电梯

题目描述:

小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐到达楼上需要的时间。

示例1

输入:

1

输出:

2

示例2

输入:

12

输出:

6

参考代码:

#include <stdio.h>

int main()
{
    int n = 0;
    int time = 2;
    scanf("%d", &n);
    if (n / 12 == 1)
    {
        printf("%d\n", time+4);
    }
    else
    {
        printf("%d\n", time);
    }
    return 0;
}

97.小乐乐与欧几里得

题目描述:

小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。

输入描述:

每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

输出描述:

对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

示例1

输入:

10 20

输出:

30

示例2

输入:

15 20

输出:

65

参考代码:

#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    scanf("%d%d", &n, &m);
    int max = n > m ? n : m;
    int min = n > m ? m : n;
    int GCD = 0; //最大公因数
    int Lcm = 0; //最小公倍数
    while (1)
    {
        if (n % min == 0 && m % min == 0)
        {
            GCD = min;
            break;
        }
        else
        {
            min--;
        }
    }

    while (1)
    {
        if (max % m == 0 && max % n == 0)
        {
            Lcm = max;
            break;
        }
        else
        {
            max++;
        }
    }
    printf("%d\n", GCD+ Lcm);
    return 0;
}

98.小乐乐改数字

题目描述:

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐修改后得到的数字。

示例1

输入:

222222

输出:

0

示例2

输入:

123

输出

101

参考代码:

#include <stdio.h>
#include <math.h>

int main()
{
    int n = 0;
    int i = 0;
    int ret = 0;
    scanf("%d", &n);
    while (n)
    {
        int a = n % 10;
        if (a % 2 == 0)
        {
            a=0;
        }
        else
        {
            a=1;
        }
        ret += a * pow(10, i);
        n = n / 10;
        i++;
    }
    printf("%d", ret);
    return 0;
}

99.小乐乐走台阶

题目描述:

小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?

输入描述:

输入包含一个整数n (1 ≤ n ≤ 30)

输出描述:

输出一个整数,即小乐乐可以走的方法数。

示例1

输入:

2

输出:

2

示例2

输入:

10

输出:

89

参考代码:

#include <stdio.h>

int fib(int n)
{
    if (n <= 2)
    {
        return n;
    }
    else
    {
        return fib(n - 1) + fib(n - 2);
    }
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int num = fib(n);
    printf("%d\n", num);
    return 0;
}

100.小乐乐和序列

题目描述:

老师给了小乐乐一个正整数序列,要求小乐乐把这个序列去重后按从小到大排序。但是老师给出的序列太长了,小乐乐没办法耐心的去重并排序,请你帮助他。

输入描述:

第一行包含一个正整数n,表示老师给出的序列有n个数。接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n)

输出描述:

输出一行,为去重排序后的序列,每个数后面有一个空格。

示例1

输入:

4

2

2

1

1

输出:

1 2

示例2

输入:

5

5

4

3

2

1

输出:

1 2 3 4 5

参考代码:

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    int k = 0;
    int arr[100000] = { 0 };
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &k);
        arr[k] = k;
    }
    for (i = 0; i < 100000; i++)
    {
        if (arr[i] != 0)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}