数组练习题目

84 阅读3分钟

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。

输出描述:

针对每行输入,输出用“*”组成的X形图案。

打印图形:找规律

#include <stdio.h>

int main() {
    int a;
    while (scanf("%d", &a) != EOF) {
    for(int i = 0; i < a; i++)
    {
        for(int j = 0; j < a; j++)
        {
            if(i == j || (i + j) == a - 1)
            {
                printf("*");
            }
            else {
            printf(" ");
            }
        }
            printf("\n");
    }
    }
    return 0;
}

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。

输出描述:

针对每行输入,输出用“”组成的“空心”正方形,每个“”后面有一个空格。

#include <stdio.h>

int main() {
    int a;
    while (scanf("%d", &a) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        for(int i = 0; i < a; i++)
        {
            for(int j = 0; j < a; j++)
            {
                if(i == 0 || i == a - 1)
                {
                    printf("* ");
                }
                else if(j == 0 || j == a - 1)
                {
                    printf("* ");
                }
                else
                {
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

描述

牛牛有一个矩阵 an,ma__n,m,他想编写一个程序,计算转置后的矩阵 an,m⊤a__n,m⊤。

【名词解释】 【转置矩阵】转置矩阵是将矩阵的行列互换得到的新矩阵。

输入描述:

在一行中输入两个整数 n,mn,m (1≦n,m≦10)(1≦n,m≦10),分别表示矩阵的行数和列数。 接下来 nn 行,每行输入 mm 个整数 ai,1,ai,2,…,ai,ma__i,1,a__i,2,…,a__i,m (−109≦ai,j≦109)(−109≦a__i,j≦109),用空格分隔。

输出描述:

输出 mm 行 nn 列,为矩阵的转置结果。每个元素之后使用一个空格。

#include <stdio.h>

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

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

    return 0;
}

描述

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

数据范围: 1≤n,m≤1000 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000 0≤val≤30000

输入描述:

输入包含三行,

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

第二行包含n个整数,用空格分隔。

第三行包含m个整数,用空格分隔。

输出描述:

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

#include <stdio.h>

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

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

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

正文完