白小彦 发表于 2023-5-16 22:08:49

求助

c语言小白,不太明白为啥会超时而且答案有问题
#include<stdio.h>
void main()
{
int a={1,4,6,9,13,16,19,28,40,100};
int i,k,index,temp,x;
scanf("%d",&x);
a=x;
for(k=0;k<11;k++)
    k=a;
for(i=k+1;i<11;i++)
{ if(a<a)
    index=i;
}
   temp=a;
   a=a;
   a=temp;
for(i=0;i<11;i++)
    printf("%4d",a);
}
   


isdkz 发表于 2023-5-16 22:09:37

这段代码存在几个问题:

1. 数组越界:数组a的长度为10,但是在代码中却访问了a,这会导致未定义的行为。

2. 循环逻辑错误:在第一个for循环中,k被赋值为a,但是在循环内部并没有对k进行修改,导致循环无法结束。

3. 变量未初始化:index没有被初始化,导致在第二个for循环中可能会出现错误的结果。

4. 交换错误:在交换a和a的值时,应该将a的值赋给temp,而不是a的值。

下面是修改后的代码:

#include <stdio.h>

int main() {
    int a = {1, 4, 6, 9, 13, 16, 19, 28, 40, 100};
    int i, k, index = 0, temp, x;
    scanf("%d", &x);
    a = x; // 将x放到数组的最后一个位置
    for (k = 0; k < 10; k++) {
      if (a == x) {
            index = k; // 找到x在数组中的位置
            break;
      }
    }
    for (i = k + 1; i < 10; i++) {
      if (a[ i] < a) {
            index = i; // 找到最小值的位置
      }
    }
    temp = a;
    a = a;
    a = temp; // 交换a和a的值
    for (i = 0; i < 10; i++) {
      printf("%4d", a[ i]);
    }
    return 0;
}


修改后的代码将x放到数组的最后一个位置,然后找到x在数组中的位置,再找到最小值的位置,最后交换a和a的值。

桃花飞舞 发表于 2023-5-17 08:12:25

大致看了像是把输入值插入到有序数组使数组依然有序。上楼回答的很清楚。

陈尚涵 发表于 2023-5-21 17:00:57

桃花飞舞 发表于 2023-5-17 08:12
大致看了像是把输入值插入到有序数组使数组依然有序。上楼回答的很清楚。

楼上用的gpt{:10_250:}

zhangjinxuan 发表于 2023-5-21 20:50:56

for(k=0;k<11;k++)
    k=a;
这一步出了问题,你仔细看看。

桃花飞舞 发表于 2023-6-11 04:21:23

陈尚涵 发表于 2023-5-21 17:00
楼上用的gpt

你说的都对
页: [1]
查看完整版本: 求助