Lenguaje C: ingrese dos secuencias en orden ascendente, combine las dos secuencias en una secuencia ordenada y salida.

tema:

describir

Introduzca dos secuencias en orden ascendente , fusione las dos secuencias en una secuencia ordenada y salida .

            

Introduzca una descripción:

La entrada consta de tres líneas ,
            
la primera línea contiene dos números enteros positivos n , m separados por espacios . n indica el número de números en la primera secuencia ascendente en la segunda línea , ym indica el número de números en la segunda secuencia ascendente en la tercera línea .
            
La segunda línea contiene n enteros separados por espacios .
            
La tercera línea contiene m enteros separados por espacios.

                 

Descripción de salida:

La salida es una línea y la salida es una secuencia ascendente de longitud n+m , es decir, los elementos de la secuencia ascendente de longitud n y la secuencia ascendente de longitud m se reorganizan y fusionan en secuencia ascendente .

                    

 ================================================== =======================

                       

Ideas:

Idea general:

(uno).

Introduzca n y m ,

Definir arreglos de longitud variable arr1 y arr2 (Niuke.com admite arreglos),

Asignar valores a arreglos de longitud variable

                    

(dos).

Fusionar : defina la tercera matriz de longitud variable arr3 , defina respectivamente los subíndices i , j , k de las tres matrices ,

Use un ciclo while , fusione cuando arr1 y arr2 tengan valores , fusione en arr3 ,

Use la declaración de juicio condicional if para asignar el valor de arr1 más pequeño que arr2 a arr3 , ajuste los subíndices de las dos matrices ,

Use la instrucción else para asignar el valor igual a o arr2 < arr1 a arr3 y ajuste los subíndices de las dos matrices

                

(tres).

Después de completar los pasos en (2),

Saltar fuera del bucle significa que se ha atravesado una matriz .

En este momento, los subíndices i, j y k se han movido a las posiciones apropiadas .

Primero determine qué matriz ha sido atravesada :

Si i == n , significa que arr1 ha terminado de atravesar , luego coloque todos los elementos restantes en arr2 en arr3 ;

En otros casos (j == m) , significa que arr2 ha terminado de atravesar , luego coloque todos los elementos restantes en arr1 en arr3 .

imprimir _

                        


                 

primer paso:

(1) Entrada n y m

              

(2) Defina matrices de longitud variable arr1 y arr2

              

(3) Asignar valores a matrices de longitud variable

                     

Código de implementación:

#include <stdio.h>
int main() {
    
    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
    //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
    //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    return 0;
}

Darse cuenta de la imagen:

                 


                 

Segundo paso:

Inicie la fusión:

              

(1) Defina la tercera matriz de longitud variable arr3 y defina los subíndices de tres matrices de longitud variable : i , j , k

              

(2) Use un bucle while para combinar cuando tanto arr1 como arr2 tengan valores , y combínelos en arr3 ,

            

(3) Use la declaración de juicio condicional if para asignar el valor de arr1 más pequeño que arr2 a arr3 y ajuste los subíndices de las dos matrices .

Use la instrucción else para asignar el valor igual a o arr2 < arr1 a arr3 y ajuste los subíndices de las dos matrices

                     

Código de implementación:

#include <stdio.h>
int main() {
    
    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
    //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
    //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    //开始合并:
    //定义第三个变长数组arr3,存放两arr1 和 arr2合并后的结果:
    int arr3[n + m]; //变长数组不能初始化
    //定义三个变长数组的下标:
    i = 0; //arr1下标
    int j = 0; //arr2下标
    int k = 0; //arr3下标

    //使用 while循环,
    while (i<n && j<m)
     //i<n:arr1下标小于arr1长度,说明arr1还有值
     //j<m:arr2下标小于arr2长度,说明arr2还有值
        //两个数组都有值才用进行比较赋值
    {
        if (arr1[i] < arr2[j]) //arr1的值小于arr2的值
        {
            arr3[k] = arr1[i]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            i++;
        }
        else //等于时放谁都一样 或 arr2变得比较小了
        {
            arr3[k] = arr2[j]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            j++;
        }
    }

    return 0;
}

Darse cuenta de la imagen:

                 


                 

tercer paso:

Después de completar los pasos en (2),

Saltar fuera del bucle significa que se ha atravesado una matriz .

En este momento, los subíndices i, j y k se han movido a las posiciones apropiadas .

           

(1) Primero determine qué matriz ha sido atravesada :

Si i == n , significa que arr1 ha terminado de atravesar , luego coloque todos los elementos restantes en arr2 en arr3 ;

En otros casos (j == m) , significa que arr2 ha terminado de atravesar , luego coloque todos los elementos restantes en arr1 en arr3 .

              

(2) Imprimir

                     

Código de implementación:

#include <stdio.h>
int main() {

    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
        //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
        //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    //开始合并:
    //定义第三个变长数组arr3,存放两arr1 和 arr2合并后的结果:
    int arr3[n + m]; //变长数组不能初始化
    //定义三个变长数组的下标:
    i = 0; //arr1下标
    int j = 0; //arr2下标
    int k = 0; //arr3下标

    //使用 while循环,
    while (i < n && j < m)
        //i<n:arr1下标小于arr1长度,说明arr1还有值
        //j<m:arr2下标小于arr2长度,说明arr2还有值
           //两个数组都有值才用进行比较赋值
    {
        if (arr1[i] < arr2[j]) //arr1的值小于arr2的值
        {
            arr3[k] = arr1[i]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            i++;
        }
        else //等于时放谁都一样 或 arr2变得比较小了
        {
            arr3[k] = arr2[j]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            j++;
        }
    }

    //跳出循环说明有一个数组已经被遍历完了
    //此时,i、j、k 都已经移动到了合适的位置
    //判断哪个数组遍历完了进行操作:
    if (i == n) //arr1下标等于arr1数组长度,说明arr1遍历完了
    {
        //将arr2中剩余的元素全部放入arr3中:
        while (j < m)//arr2下标小于arr2数组长度就继续放
        {
            arr3[k] = arr2[j];
            k++;
            j++;
        }
    }
    else //arr2遍历完
    {
        //将arr1中剩余的元素全部放入arr3中:
        while (i < n)//arr1下标小于arr1数组长度就继续放
        {
            arr3[k] = arr1[i];
            k++;
            i++;
        }
    }

    //进行打印:
    for (i = 0; i < n + m; i++)
    {
        printf("%d ", arr3[i]);
    }

    return 0;
}

Darse cuenta de la imagen:

                    

Código final y efecto de implementación

Código definitivo:

#include <stdio.h>
int main() {

    //输入 n 和 m
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);

    //定义变长数组:
    int arr1[n];
    int arr2[m];

    //对变长数组进行赋值
    int i = 0;
    for (i = 0; i < n; i++)
        //前面输入的n就是arr1的长度
    {
        scanf("%d", &arr1[i]);
    }

    i = 0;
    for (i = 0; i < m; i++)
        //前面输入的m就是arr1的长度
    {
        scanf("%d", &arr2[i]);
    }

    //开始合并:
    //定义第三个变长数组arr3,存放两arr1 和 arr2合并后的结果:
    int arr3[n + m]; //变长数组不能初始化
    //定义三个变长数组的下标:
    i = 0; //arr1下标
    int j = 0; //arr2下标
    int k = 0; //arr3下标

    //使用 while循环,
    while (i < n && j < m)
        //i<n:arr1下标小于arr1长度,说明arr1还有值
        //j<m:arr2下标小于arr2长度,说明arr2还有值
           //两个数组都有值才用进行比较赋值
    {
        if (arr1[i] < arr2[j]) //arr1的值小于arr2的值
        {
            arr3[k] = arr1[i]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            i++;
        }
        else //等于时放谁都一样 或 arr2变得比较小了
        {
            arr3[k] = arr2[j]; //把大的值赋给arr3
            //给值 和 被给值 的数组下标都用往后移
            k++;
            j++;
        }
    }

    //跳出循环说明有一个数组已经被遍历完了
    //此时,i、j、k 都已经移动到了合适的位置
    //判断哪个数组遍历完了进行操作:
    if (i == n) //arr1下标等于arr1数组长度,说明arr1遍历完了
    {
        //将arr2中剩余的元素全部放入arr3中:
        while (j < m)//arr2下标小于arr2数组长度就继续放
        {
            arr3[k] = arr2[j];
            k++;
            j++;
        }
    }
    else //arr2遍历完
    {
        //将arr1中剩余的元素全部放入arr3中:
        while (i < n)//arr1下标小于arr1数组长度就继续放
        {
            arr3[k] = arr1[i];
            k++;
            i++;
        }
    }

    //进行打印:
    for (i = 0; i < n + m; i++)
    {
        printf("%d ", arr3[i]);
    }

    return 0;
}

Darse cuenta del efecto:

Supongo que te gusta

Origin blog.csdn.net/weixin_63176266/article/details/131261167
Recomendado
Clasificación