在有序表中插入两个数相关问题


#include<stdio.h>
int main()
{
    int flag = 0;
    int x, y, i, j, n;
    int a[100] = {0};
    
    scanf("%d", &n);
    for(i=0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }
    scanf("%d %d", &x, &y);

//将x y 有序插入到数组a中
/***********Begin***********/
   int t =0;
    t = x;
    while(flag != 2)
    {
        for(j=0;j<n;j++)
        {   
            if(t > a[n-1])
            {
                a[n] = t;
            }
            if(t == a[j]) 
            {
                break;
            }

            if(t < a[j])      
            {   
                
                for (int k = n;k > j; k--)
                {
                    a[k] = a[k-1];
                }
                a[j] = t;
                n++;
                break;             
            }
        }
        flag++;
        if(flag == 1)
        {
            t = y;
        }
    }
    
/************End************/ 

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

测试输入:
2
4 6
8 13
—— 预期输出 ——
4 6 8 13
—— 实际输出 ——
4 6

求指点

修改如下,改动处见注释,供参考:

#include<stdio.h>
int main()
{
    int flag = 0;
    int x, y, i, j, n;
    int a[100] = { 0 };

    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    scanf("%d %d", &x, &y);

    //将x y 有序插入到数组a中
    /***********Begin***********/
    int t = 0, k;
    t = x;
    while (flag != 2)
    {
        //for (j = 0; j < n; j++) 修改
        //{
            if (t > a[n - 1])
            {
                a[n] = t;
            }
            //if (t == a[j])   //修改
            //{
            //    break;
            //}
            else {
                for (k = n; a[k - 1] > t && k > 0; k--) //修改
                    a[k] = a[k - 1];
                a[k] = t;
                //break;
                //}
            }
            n++;   // 修改
            flag++;
            //if (flag == 1) 修改
            //{
            t = y;
            //}               修改
    }
    /************End************/

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

【以下回答由 GPT 生成】

问题出在循环中的一个逻辑错误以及对数组长度的错误估计。以下是我修改建议的代码:

#include <stdio.h>

int main()
{
    int flag = 0;
    int x, y, i, j, n;
    int a[100] = {0};

    scanf("%d", &n);
    for(i=0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }
    scanf("%d %d", &x, &y);

    //将x y 有序插入到数组a中
    int t = 0;
    t = x;
    while(flag != 2)
    {
        for(j=0; j<=n; j++)  // 修改此处,使循环能够遍历到最后一个元素
        {   
            if(t > a[n-1] || j == n)  // 修改此处,使得可以将t插入到数组的末尾
            {
                a[n] = t;
                n++;
                break;  // 结束循环
            }
            if(t == a[j]) 
            {
                break;
            }
            if(t < a[j])      
            {   
                for (int k = n; k > j; k--)
                {
                    a[k] = a[k-1];
                }
                a[j] = t;
                n++;
                break;        
            }
        }
        flag++;
        if(flag == 1)
        {
            t = y;
        }
    }

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

这段代码会正确地将新的元素x和y插入到有序数组a中,并输出更新后的有序数组。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^