wsx666946 发表于 2023-8-5 20:04:34

已经升序排好的数组 插入一个数

兄弟们 刚学c语言 帮我看看哪里不对

#include<stdio.h>
int main()
{
        int i,j,k,n,f,h;
        int a={1,2,20,40,60};
        scanf("%d",&k);
        for(i=0;i<5;i++)
        {
        if(a>k)
                n=i;
                for(j=i+1;j<5;j++)
                        {
                        a=a;
                        }
                a=k;
        }
        for(i=0;i<6;i++)               
        printf("%d ",a);
        return 0;
               
}

Mike_python小 发表于 2023-8-5 20:04:35

问题:已经升序排好的数组插入一个数 C\C++交流

你的代码中,插入一个数到已经升序排好的数组的逻辑有一些问题。以下是修改后的代码:


#include <stdio.h>

int main()
{
    int i, j, n;
    int a = {1, 2, 20, 40, 60};
    int k;

    printf("请输入要插入的数:");
    scanf("%d", &k);

    for (i = 0; i < 5; i++)
    {
      if (a > k)
      {
            n = i;
            break;
      }
    }

    for (j = 4; j >= n; j--)
    {
      a = a;
    }

    a = k;

    for (i = 0; i < 6; i++)
    {
      printf("%d ", a);
    }

    return 0;
}


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

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

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

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

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

5. 在n位置插入数k。

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

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

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

如果回答对你有帮助,请给我一个最佳答案!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-8-5 20:04:56

问题出在你的代码中,你没有正确地插入新的数值。在你的循环中,当a[ i] > k时,你将n的值设置为i ,但是你没有在循环结束后正确地插入新的数值。

以下是修正后的代码:

#include <stdio.h>

int main() {
    int i, j, k, n;
    int a = {1, 2, 20, 40, 60}; // 数组长度增加到 7
    scanf("%d", &k);
    for (i = 0; i < 6; i++) {
      if (a[ i] > k) {
            n = i;
            break; // 找到插入位置后立即跳出循环
      }
    }
    for (j = 5; j >= n; j--) {
      a = a;
    }
    a = k;
    for (i = 0; i < 7; i++) {
      printf("%d ", a[ i]);
    }
    return 0;
}


修正后的代码中,我增加了数组a的长度为 7,以便能够插入新的数值。我还在第一个循环中添加了一个break语句,以便在找到插入位置后立即跳出循环。然后,我在第二个循环中将数组中的元素向后移动一个位置,并在插入位置处设置新的数值。

请注意,这个修正后的代码假设数组a中没有重复的元素。如果数组中有重复的元素,并且你希望将新的数值插入到重复元素的前面,你需要对代码进行进一步的修改。

学习编程中的Ben 发表于 2023-8-5 20:04:58

问题:已经升序排好的数组插入一个数,C/C++交流

你的代码中有一些问题,导致无法正确地将一个数插入已经升序排好的数组中。下面是对你的代码进行了修改和解释的版本:

#include<stdio.h>

int main() {
    int i, j, n, k;
    int a = {1, 2, 20, 40, 60}; // 注意数组大小为7,比原先多一个元素,以容纳新插入的数
    scanf("%d", &k);

    // 在插入之前先找到插入位置
    for (i = 0; i < 5; i++) {
      if (a > k) {
            n = i;
            break;
      }
    }

    // 将插入位置后的元素后移一位,为新的数腾出位置
    for (j = 5; j >= n; j--) {
      a = a;
    }
   
    // 将新的数插入到正确的位置
    a = k;

    // 打印插入后的数组
    for (i = 0; i < 6; i++) {
      printf("%d ", a);
    }
   
    return 0;
}


这里的修改主要包括以下几点:

1. 数组大小:在声明数组a时,将其大小设置为7,以容纳新插入的数。

2. 插入位置:在找到插入位置时,使用break语句来终止循环,避免在找到位置后继续执行后面的代码。

3. 元素后移:在将插入位置后的元素后移一位时,修改了循环的条件(从后往前)和递减的方式。

4. 打印数组:在打印数组时,循环的上限改为6,以反映数组大小。

请注意,这只是对你原先代码的修改和解释,并不保证逻辑的完全正确。如果还有其他问题,请提供更多细节,我将尽力帮助你解决。祝你在C语言的学习中取得进展!

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

wsx666946 发表于 2023-8-5 20:05:28

我想着就是找到比他大的那个位置 然后保存那个位置 腾完位置之后再插入

学习编程中的Ben 发表于 2023-8-5 20:06:48

wsx666946 发表于 2023-8-5 20:05
我想着就是找到比他大的那个位置 然后保存那个位置 腾完位置之后再插入

你想吗,你要往这一位插入,那你所有的元素都有往后移动一位
页: [1]
查看完整版本: 已经升序排好的数组 插入一个数