鱼C论坛

 找回密码
 立即注册
查看: 1746|回复: 5

[已解决]已经升序排好的数组 插入一个数

[复制链接]
发表于 2023-8-5 20:04:34 | 显示全部楼层 |阅读模式
1鱼币
兄弟们 刚学c语言 帮我看看哪里不对

#include<stdio.h>
int main()
{
        int i,j,k,n,f,h;
        int a[6]={1,2,20,40,60};
        scanf("%d",&k);
        for(i=0;i<5;i++)
        {
        if(a[i]>k)
                n=i;
                for(j=i+1;j<5;j++)
                        {
                        a[j+1]=a[j];
                        }
                a[n]=k;
        }
        for(i=0;i<6;i++)               
        printf("%d ",a[i]);
        return 0;
               
}
最佳答案
2023-8-5 20:04:35
问题:已经升序排好的数组插入一个数 C\C++交流

你的代码中,插入一个数到已经升序排好的数组的逻辑有一些问题。以下是修改后的代码:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int i, j, n;
  5.     int a[7] = {1, 2, 20, 40, 60};
  6.     int k;
  7.     printf("请输入要插入的数:");
  8.     scanf("%d", &k);
  9.     for (i = 0; i < 5; i++)
  10.     {
  11.         if (a[i] > k)
  12.         {
  13.             n = i;
  14.             break;
  15.         }
  16.     }
  17.     for (j = 4; j >= n; j--)
  18.     {
  19.         a[j + 1] = a[j];
  20.     }
  21.     a[n] = k;
  22.     for (i = 0; i < 6; i++)
  23.     {
  24.         printf("%d ", a[i]);
  25.     }
  26.     return 0;
  27. }
复制代码

这里是对你原始代码的修改和解释:

1. 添加了一个变量k,用于接收要插入的数。

2. 修改了输出语句,提示用户输入要插入的数。

3. 在第一个循环中,如果找到了首个比插入数k大的元素,使用break语句跳出循环,将该位置记为n

4. 第二个循环从数组末尾开始,将从n位置开始的元素后移一位。

5. 在n位置插入数k

6. 最后,打印修改后的数组。

注意,我对数组 a 进行了一些调整,增加了一个元素,将数组大小从原来的6改为了7,以便能够容纳插入的新元素。

这样,你就可以正确地将一个数插入已经升序排好的数组中了。希望对你有帮助!如果还有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-8-5 20:05:28 | 显示全部楼层
我想着就是找到比他大的那个位置 然后保存那个位置 腾完位置之后再插入
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-27 04:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表