C语言练习题110例(十一)

max;
printf(“%.2f\n”, sum/5.0);
return 0;
}


### 66.有序序列插入一个数

题目描述:

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

> 第一行输入一个整数(0≤N≤50)。第二行输入N个升序排列的整数,输入用空格分隔的N个整数。第三行输入想要进行插入的一个整数。

输出描述:

> 输出为一行,N+1个有序排列的整数。

输入:

> 5
> 
> 1 6 9 22 30
> 
> 8

输出:

> 1 6 8 9 22 30

参考代码:

```c
#include 

int main()
{
    int n = 0;
    int m = 0;
    int arr[50] = { 0 };
    int i = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &m);
    for (i = n; i > 0; i--)
    {
        if (arr[i-1] > m)
        {
            arr[i] = arr[i - 1];
        }
        else
        {
            arr[i] = m;
            break;
        }
    }
    if (i == 0)
    {
        arr[0] = m;
    }
    for (i = 0; i < n + 1; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

67.筛选法求素数

题目描述:

用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0的数即为素数。

输入描述:

多组输入,每行输入一个正整数(不大于100)。

输出描述:

针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,

第二行,输出数组中2之后0 的个数。每行输出后换行。

输入:

20

输出:

2 3 5 7 11 13 17 19

11

参考代码:

#include  

int main()
{
    int n = 0;
    int count = 0;
    while (scanf("%d", &n) != EOF)
    {
        int arr[100];
        int i = 0;
        for (i = 0; i <= n; i++)
        {
            arr[i] = i;
        }
        for (i = 2; i <= n; i++)
        {
            int j = 0;
            for (j = i + 1; j <= n; j++)
            {
                if (arr[j] % i == 0)
                {
                    arr[j] = 0;
                }
            }
        }
        for (i = 2; i <= n; i++)
        {
            if (arr[i] != 0)
            {
                printf("%d ", arr[i]);
            }
            else
            {
                count++;
            }
        }
        printf("\n%d\n", count);
    }
    return 0;
}

68.图像相似度

题目描述:

给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素

点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

输入描述:

第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。

输出描述:

一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

输入:

3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出:

44.44

参考代码:

#include 

int main()
{
    int m = 0;
    int n = 0;
    int a[100][100] = { 0 };
    int b[100][100] = { 0 };
    float count = 0.0;
    int i = 0;
    int j = 0;

    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 < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &b[i][j]);
        }
    }

    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (a[i][j] == b[i][j])
            {
                count++;
            }
        }
    }
    printf("%.2f\n", 100.0 * count / (m*n));

    return 0;
}

69.验证登录

题目描述:

有个软件系统登录的用户名和密码为(用户名:admin,密码:admin),用户输入用户名和密码,判断是否登录成功。

输入描述:

多组测试数据,每行有两个用空格分开的字符串,第一个为用户名,第二个位密码。

输出描述:

针对每组输入测试数据,输出为一行,一个字符串(“Login Success!”或“Login Fail!”)。

输入:

admin admin

输出:

Login Success!

参考代码:

#include 
#include 

int main()
{
    char name[20] = { 0 };
    char password[20] = { 0 };
    while (scanf("%s  %s", &name, &password) != EOF)
    {
        if (strcmp(name, "admin") == 0 && strcmp(password, "admin") == 0)
        {
            printf("Login Success!\n");
        }
        else
        {
            printf("Login Fail!\n");
        }
    }
    return 0;
}

70.包含数字9的数

题目描述:

今年是2019年,KiKi想知道1~2019中有多少个包含数字9的数。包含数字的数是指有某一位是“9”的数,例如“2019”、“199”等。

输入描述:

输出描述:

一行,一个整数,表示1~2019中共有多少个数包含数字9。

参考代码:

#include 

int main()
{
    int i = 0;
    int n = 0;
    int count = 0;
    for (i = 1; i <= 2019; i++)
    {
        n = i;
        while (n)
        {
            if (n % 10 == 9)
            {
                count++;
                break;
            }
            n = n / 10;
        }
    }
    printf("%d\n", count);
    return 0;
}

71.奇偶统计

题目描述:

任意输入一个正整数N,统计1~N之间奇数的个数和偶数的个数,并输出。

输入描述:

一行,一个正整数N。(1≤N≤100,000)

输出描述:

一行,1~N之间奇数的个数和偶数的个数,用空格分开。

输入:

5

输出:

3 2

参考代码:

#include 

int main()
{
    int N = 0;
    scanf("%d", &N);
    printf("%d %d", N - N/2, N/2);
    return 0;
}

72.成绩统计

题目描述:

输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。

输入描述:

两行,

第1行,正整数n(1≤n≤100)

第2行,n科成绩(范围0.0~100.0),用空格分隔。

输出描述:

输出一行,三个浮点数,分别表示,最高分,最低分以及平均分(小数点后保留2位),用空格分隔。

输入:

5

99.5 100.0 22.0 60.0 88.5

输出:

100.00 22.00 74.00

参考代码:

#include 

int main()
{
    int n = 0;
    int i = 0;
    float score = 0;
    float sum = 0;
    float max = 0.0;
    float min = 100.0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%f", &score);
        sum += score;
        if (score > max)
            max = score;
        if (score < min)
            min = score;
    }
    printf("%.2f %.2f %.2f", max, min ,sum/n);
    return 0;
}

73.密码验证

题目描述:

用户登录网站,通常需要注册,一般需要输入两遍密码。请编程判断输入的两次密码是否一致,一致输出“same”,不一致输出“different”

输入描述:

每行有两个用空格分开的字符串,第一个为密码,第二个为重复密码。

输出描述:

每组输出一个字符串(“same”或“different")。

输入:

abc abc

输出:

same

参考代码:

#include 
#include 

int main()
{
    char password1[20] = { 0 };
    char password2[20] = { 0 };
    scanf("%s %s", password1, password2);
    if (strcmp(password1, password2) == 0)
    {
        printf("same\n");
    }
    else
    {
        printf("different\n");
    }
    return 0;
}

74.矩阵计算

题目描述:

输入NxM矩阵,矩阵元素均为整数,计算其中大于零的元素之和。

输入描述:

第一行为N M(N: 矩阵行数;M: 矩阵列数,且M,N<=10),接下来的N行为矩阵各行。

输出描述:

一行,其中大于零的元素之和。

输入:

3 3

2 3 4

-5 -9 -7

0 8 -4

输出:

17

参考代码:

#include 

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

75.逆序输出

题目描述:

输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。

输入描述:

一行,输入10个整数(范围-231~231-1),用空格分隔。

输出描述:

一行,逆序输出输入的10个整数,用空格分隔。

输入:

1 2 3 4 5 6 7 8 9 10

输出:

10 9 8 7 6 5 4 3 2 1

参考代码:

#include 

int main()
{
    int i = 0;
    int arr[10] = {0};
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (i = 9; i >= 0; i--)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

76.统计数据正负个数

题目描述:

输入10个整数,分别统计输出正数、负数的个数。

输入描述:

输入10个整数(范围-231~231-1),用空格分隔。

输出描述:

两行,第一行正数个数,第二行负数个数,具体格式见样例。

输入:

-1 2 3 -6 7 8 -1 6 8 10

输出:

positive:7

negative:3

参考代码:

#include 

int main()
{
    int i = 0;
    int num = 0;
    int positive = 0;
    int negative = 0;
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &num);
        if (num > 0)
            positive++;
        else
            negative++;
    }
    printf("positive:%d\n", positive);
    printf("negative:%d\n", negative);
    return 0;
}

77.N个数之和

题目描述:

输入数字N,然后输入N个数,计算这N个数的和。

输入描述:

第一行输入一个整数N(0≤N≤50),第二行输入用空格分隔的N个整数。

输出描述:

输出为一行,为第二行输入的“N个整数之和”的计算结果。

输入:

5

1 2 3 4 5

输出:

15

参考代码:

#include 

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

78.最低分与最高分之差

题目描述:

输入n个成绩,换行输出n个成绩中最高分数和最低分数的差。

输入描述:

两行,第一行为n,表示n个成绩,不会大于10000。

第二行为n个成绩(整数表示,范围0~100),以空格隔开。

输出描述:

一行,输出n个成绩中最高分数和最低分数的差。

输入:

10

98 100 99 97 95 99 98 97 96 100

输出:

5

参考代码:

#include 

int main()
{
    int i = 0;
    int num = 0;
    int sum = 0;
    int min = 100;
    int max = 0;
    int n = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &num);
        if (num > max)
            max = num;
        if (num < min)
            min = num;
    }
    printf("%d\n", max-min);
;    return 0;
}

79.有序序列判断

题目描述:

输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序。

输入描述:

第一行输入一个整数N(3≤N≤50)。

第二行输入N个整数,用空格分隔N个整数。

输出描述:

输出为一行,如果序列有序输出sorted,否则输出unsorted。

示例1

输入:

5

1 6 9 22 30

输出:

sorted

示例2

输入:

5

3 4 7 2 10

输出:

unsorted

参考代码:

#include 

int main()
{
    int n = 0;
    int flag1 = 0;
    int flag2 = 0;
    scanf("%d", &n);
    int i = 0;
    int arr[50] = { 0 };
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
        if (i > 0)
        {
            if (arr[i] < arr[i - 1])
                flag1 = 1;
            else if (arr[i] > arr[i - 1])
                flag2 = 1;
        }
    }

    if (flag1 + flag2 == 2)
    {
        printf("unsorted\n");
    }
    else
    {
        printf("sorted\n");
    }
        return 0;
}

80.序列中删除指定数字

题目描述:

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

输入描述:

第一行输入一个整数(0≤N≤50)。第二行输入N个整数,输入用空格分隔的N个整数。第三行输入想要进行删除的一个整数。

输出描述:

输出为一行,删除指定数字之后的序列。

输入:

6

1 2 3 4 5 9

4

输出:

1 2 3 5 9

参考代码:

#include 

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

81.序列中整数去重

题目描述:

输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输出描述:

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

输入:

5

10 12 93 12 75

输出:

10 12 93 75

参考代码:

#include 

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

82.有序序列的合并

题目描述:

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入描述:

输入包含三行,

第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数(范围1~5000),用空格分隔。

第三行包含m个整数(范围1~5000),用空格分隔。

输出描述:

输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

输入:

5 6

1 3 7 9 22

2 8 10 17 33 44

输出:

1 2 3 7 8 9 10 17 22 33 44

参考代码:

#include 

int main()
{
    int m = 0;
    int n = 0;
    int i = 0;
    int j = 0;
    int arr1[100] = { 0 };
    int arr2[100] = { 0 };
    scanf("%d %d", &n, &m);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr1[i]);
    }
    for (i = 0; i < m; i++)
    {
        scanf("%d", &arr2[i]);
    }

    i = 0;
    while (i < n && j < m)
    {
        if (arr1[i] < arr2[j])
        {
            printf("%d ", arr1[i]);
            i++;
        }
        else
        {
            printf("%d ", arr2[j]);
            j++;
        }
    }
    if (i == n)
    {
        for (; j < m; j++)
            printf("%d ", arr2[j]);
    }
    else
    {
        for (; i < n; i++)
            printf("%d ", arr1[i]);
    }
    return 0;
}

83.班级成绩输入输出

题目描述:

输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。

输入描述:

五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。

输出描述:

五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。

输入:

98.5 96.0 100 99 88

60.5 77 88.5 99 60

80 80.5 89 91 92

93 94 95.5 96 97.5

100 98 88.5 88 78.5

输出:

98.5 96.0 100.0 99.0 88.0 481.5

60.5 77.0 88.5 99.0 60.0 385.0

80.0 80.5 89.0 91.0 92.0 432.5

93.0 94.0 95.5 96.0 97.5 476.0

100.0 98.0 88.5 88.0 78.5 453.0

参考代码:

#include 

int main()
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 5; i++)
    {
        double sum = 0.0;
        double score = 0.0;
        for (j = 0; j < 5; j++)
        {
            scanf("%lf", &score);
            sum += score;
            printf("%.1lf ", score);
        }
        printf("%.1lf\n", sum);
    }
    return 0;
}

84.矩阵元素定位

题目描述:

KK得到了一个n行m列的矩阵,现在他想知道第x行第y列的值是多少,请你帮助他完成这个任务。

输入描述:

第一行包含两个数n和m,表示这个矩阵包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示矩阵中的元素。接下来一行输入x和y,用空格分隔,表示KiKi想得到的元素的位置。(1≤x≤n≤10,1≤y≤m≤10)

输出描述:

一行,输出一个整数值,为KK想知道的值。

输入:

2 3

1 2 3

4 5 6

1 2

输出:

2

参考代码:

#include 

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

85.序列重组矩阵

题目描述:

KK现在得到一个包含nm个数的整数序列,现在他需要把这nm个数按顺序规划成一个n行m列的矩阵并输出,请你帮他完成这个任务。

输入描述:

一行,输入两个整数n和m,用空格分隔,第二行包含n*m个整数(范围-231~231-1)。(1≤n≤10,1≤m≤10)

输出描述:

输出规划后n行m列的矩阵,每个数的后面有一个空格。

输入:

2 3

1 2 3 4 5 6

输出:

1 2 3

4 5 6

参考代码:

#include 

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

86.最高身高

题目描述:

KK想从n行m列的方阵队列中找到身高最高的人的位置,请你帮助他完成这个任务。

输入描述:

第一行包含两个整数n和m,表示这个方阵队列包含n行m列。从2到n+1行,每行输入m个整数(范

围-231~231-1),用空格分隔,共输入n*m个数,表示方阵中的所有人的身高(保证输入身高都不相同)。(1≤x≤n≤10,1≤y≤m≤10)

输出描述:

一行,输出两个整数,用空格分隔,表示方阵中身高最高的人所在的行号和列号。

输入:

2 2

175 180

176 185

输出:

2 2

参考代码:

#include 

int main()
{
    int n = 0;
    int m = 0;
    scanf("%d%d", &n, &m);
    int i = 0;
    int j = 0;
    int height = 0;
    int max = 0;
    int x = 0;
    int y = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &height);
            if (height > max)
            {
                x = i;
                y = j;
                max = height;
            }
        }
    }
    printf("%d %d\n",x+1, y+1 );
    return 0;
}

87.矩阵相等判断

题目描述:

KK得到了两个n行m列的矩阵,他想知道两个矩阵是否相等,请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。

输入描述:

第一行包含两个整数n和m,表示两个矩阵包含n行m列,用空格分隔。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

从n+2行到2n+1,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第二个矩阵中的元素。

1 < n,m < 10

输出描述:

一行,如果两个矩阵相等输出"Yes"并换行,否则输出"No"并换行。

输入:

2 2

1 2

3 4

1 2

3 4

输出:

Yes

参考代码:

#include 

int main()
{
    int n = 0;
    int m = 0;
    scanf("%d%d", &n, &m);
    int i = 0;
    int j = 0;
    int arr1[10][10] = { 0 };
    int arr2[10][10] = { 0 };
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr1[i][j]);
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr2[i][j]);
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (arr1[i][j] != arr2[i][j])
            {
                printf("No\n");
                return 0;
            }
        }
    }
    printf("Yes\n");
    return 0;
}

88.上三角矩阵判断

题目描述:

KK想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述:

一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

输入:

3

1 2 3

0 4 5

0 0 6

输出:

YES

参考代码:

#include 

int main()
{
    int i = 0;
    int j = 0;
    int n = 0;
    int arr[10][10] = { 0 };
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (i > j)
            {
                if (arr[i][j] != 0)
                {
                    printf("NO\n");
                    return 0;
                }
            }
        }
    }

    printf("YES\n");
    return 0;
}

89.矩阵转置

题目描述:

KK有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。

输入描述:

第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

输出描述:

输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。

输入:

2 3

1 2 3

4 5 6

输出:

1 4

2 5

3 6

参考代码:

#include 

int main()
{
    int n = 0;
    int m = 0;
    scanf("%d%d", &n, &m);
    int i = 0;
    int j = 0;
    int arr[10][10] = { 0 };
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }

    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%d ",arr[j][i] );
        }
        printf("\n");
    }
    return 0;
}

90.矩阵交换

题目描述:

KK有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。

输入描述:

第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)

从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符’r’时代表进行行变换,当t为字符’c’时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。

输出描述:

输出n行m列,为矩阵交换后的结果。每个数后面有一个空格。

输入:

2 2

1 2

3 4

1

r 1 2

输出:

3 4

1 2

参考代码:

#include 

int main()
{
    int n = 0;
    int m = 0;
    scanf("%d%d", &n, &m);
    int i = 0;
    int j = 0;
    int arr[10][10] = { 0 };
    int k = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    scanf("%d", &k);
    char t = 0;
    int a = 0;
    int b = 0;
    for (i = 0; i < k; i++)
    {
        scanf(" %c %d %d", &t, &a, &b);
        if (t == 'r')
        {
            for (j = 0; j < m; j++)
            {
                int tmp = arr[a - 1][j];
                arr[a - 1][j] = arr[b - 1][j];
                arr[b - 1][j] = tmp;
            }
        }
        else if (t == 'c')
        {
            for (j = 0; j < n; j++)
            {
                int tmp = arr[j][a - 1];
                arr[j][a - 1] = arr[j][b - 1];
                arr[j][b - 1] = tmp;
            }
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

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 

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 

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 

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.小乐乐求和

题目描述:

小乐乐最近接触了求和符号Σ,他想计算C语言练习题110例(十一)_第1张图片的结果。但是小乐乐很笨,请你帮助他解答。

输入描述:

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

输出描述:

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

输入:

10

输出:

55

参考代码:

#include 

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 

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 

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 

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 
#include 

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 

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 

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

101.小乐乐与字符串

题目描述:

在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串“CHN”的个数。

子串的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子串。如“ABC”的子串有“A”、

“B”、“C”、“AB”、“AC”、“BC”、“ABC”。

输入描述:

输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)

输出描述:

输出一个整数,为字符串s中字串“CHN”的数量。

示例1

输入:

CCHNCHN

输出:

7

示例2

输入:

CCHNCHNCHNCHN

输出:

30

参考代码:

#include 

int main()
{
    char str[8000] = { 0 };
    scanf("%s", str);
    char* p = str;
    long long c = 0;
    long long ch = 0;
    long long chn = 0;
    while (*p)
    {
        if (*p == 'C')
            c++;
        else if (*p == 'H')
            ch += c;
        else if (*p == 'N')
            chn += ch;
        p++;
    }
    printf("%lld\n", chn);
    return 0;
}

102.小乐乐找最大数

题目描述:

小乐乐获得4个最大数,请帮他编程找到最大的数。

输入描述:

一行,4个整数,用空格分开。

输出描述:

一行,一个整数,为输入的4个整数中最大的整数。

输入:

5 8 2 5

输出:

8

参考代码:

#include 

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

103.小乐乐转换成绩

题目描述:

小乐乐输入百分制成绩,他想将成绩转换成等级制。转换规则为:90-100为’A’,80-89为’B’,70-79

为’C’,60-69为’D’,59以下为’E’。如果输入的成绩不在0-100之间,输出’F’。

输入描述:

一行,一个整数表示的成绩。

输出描述:

一行,转换后的等级。

输入:

78

输出:

C

参考代码:

#include 

int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score >= 90 && score <= 100)
        printf("A\n");
    else if (score >= 80 && score < 90)
        printf("B\n");
    else if (score >= 70 && score < 80)
        printf("C\n");
    else if (score >= 60 && score < 70)
        printf("D\n");
    else if (score >= 0 && score < 60)
        printf("E\n");
    else
        printf("F\n");
    return 0;
}

104.小乐乐计算函数

题目描述:

小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。

在这里插入图片描述

输入描述:

一行,输入三个整数,用空格隔开,分别表示a, b, c。

输出描述:

一行,一个浮点数,小数点保留2位,为计算后m的值。

输入:

1 2 3

输出:

0.30

参考代码:

#include 

int max3(int a, int b, int c)
{
    int max = 0;
    max = a > b ? a : b;
    max = c > max ? c : max;
    return max;
}

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("%d %d %d", &a, &b, &c);
    double m = 0;
    m = (double)max3(a + b, b, c) / (max3(a, b + c, c) + max3(a, b, b + c));
    printf("%.2f\n", m);
    return 0;
}

105.小乐乐查找数字

题目描述:

给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。

输入描述:

共3行

第一行,一个整数,表示n(1 <= n <= 100)。

第二行,共输入n个整数,两个整数之间用空格分隔。

第三行,输入一个整数,表示要查找的整数x。

输出描述:

一行,表示整数x出现的次数。

输入:

5

1 1 2 1 3

1

输出:

3

参考代码:

#include 

int main()
{
	int i = 0;
	int n = 0;
	int count = 0;
	int arr[101] = {0};
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	int key = 0;
	scanf("%d", &key);
	for (i = 0; i < n; i++)
	{
		if (arr[i] == key)
			count++;
	}
	printf("%d\n", count);
	return 0;
}

106.kk学程序设计基础

题目描述:

BoBo老师教了KK学习程序设计基础,他知道C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期KK学习了C和C++,

学好他们,其他编程语言都可以很轻松掌握。C和C++的输入有区别,请帮KK输出C和C++输出Hello

world的代码。

输入描述:

输出描述:

printf(“Hello world!\n”);

cout << “Hello world!” << endl;

参考代码:

#include 

int main()
{
    printf("printf(\"Hello world!\\n\");\n");
    printf("cout << \"Hello world!\" << endl;");
    return 0;
}

107.kk求质数的个数

题目描述:

KK知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。

输入描述:

输出描述:

一行,一个整数,表示所有三位整数中,有多少个质数。

参考代码:

#include 

int isprime(int n)
{
    int i = 0;
    for (i = 2; i < n; i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main()
{
    int n = 0;
    int count = 0;
    int i = 0;
    for (i = 100; i < 1000; i++)
    {
        if (isprime(i))
            count++;
    }
    printf("%d\n", count);
    return 0;
}

108.kk去重整数并排序

题目描述:

给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到达排序输出。

输入描述:

第一行,输入一个整数n,表示序列有n个整数。

第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。

输出描述:

去重并且从小到大排列的整数序列,整数之间用空格分隔。

输入:

6

5 3 3 4 2 2

输出:

2 3 4 5

参考代码:

#include 

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

109.kk学结构体和指针

题目描述:

KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。

输入描述:

包括三行:

第一行输入数据个数n (3≤n≤100);第二行依次输入n个整数,用空格分隔;第三行输入欲删除数据m。

输出描述:

包括两行:

第一行输出完成删除后的单链表长度;第二行依次输出完成删除后的单链表数据。

输入:

5

1 2 2 3 4

2

输出:

3

1 3 4

参考代码:

#include 

struct Node
{
	int data;
	struct Node* next; 
};

int main()
{
	struct Node* list = NULL;
	struct Node* tail = NULL;
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int j = 0;
	int m = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &j);
		struct Node* pn = (struct Node*)malloc(sizeof(struct Node));
		pn->data = j;
		pn->next = NULL;

		if (list == NULL)
		{
			list = pn;
			tail = pn;
		}
		else
		{
			tail->next = pn;
			tail = pn;
		}
	}
		scanf("%d", &m);

		struct Node* prev = NULL;
		struct Node* cur = list;

		while (cur)
		{
			if (cur->data == m)
			{
				struct Node* pd = cur;
				if (cur == list)
				{
					list = list->next;
					cur = list;
				}
				else
				{
					prev->next = cur->next;
					cur = prev->next;
				}
				free(pd);
				n--;
			}
			else
			{
				prev = cur;
				cur = cur->next;
			}
		}
		printf("%d\n", n);
		cur = list;
		while (cur)
		{
			printf("%d ", cur->data);
			cur = cur->next;
		}

		cur = list;
		struct Node* del = NULL;
		while (cur)
		{
			del = cur;
			cur = cur->next;
			free(del);
		}
		list = NULL;
	return 0;
		while (cur)
		{
			del = cur;
			cur = cur->next;
			free(del);
		}
		list = NULL;
	return 0;
}

110.kk定义电子日历类

题目描述:

KK学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。

它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求:

(1)带有默认形参值的构造函数,默认值为0, 0, 0;

(2)输出日期函数,用“日/月/年”格式输出日期;

(3)设置日期函数,从键盘输入年、月、日。

输入描述:

一行,三个整数,用空格分隔,分别表示年、月、日。

输出描述:

一行,用“日/月/年”格式输出日期。

输入:

2019 12 30

输出:

30/12/2019

参考代码:

#include 

using namespace std;

class TDate
{
private:
    int Year;
    int Month;
    int Day;
public:
    TDate(int year = 0; , int month = 0, int day = 0)
    {
        Year = year;
        Month = month;
        Day = day;
    }
    void print()
    {
        cout << Day << "/" << Month << "/" << Year << endl;
    }
};
int main()
{
    int year = 0;
    int month = 0;
    int day = 0;
    cin >> year >> month >> day;
    TDate d(year, month, day);
    d.print();
    return 0;
}

你可能感兴趣的:(c语言,算法,数据结构)