鱼C论坛

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

求助

[复制链接]
发表于 2023-5-16 22:08:49 | 显示全部楼层 |阅读模式
5鱼币
c语言小白,不太明白为啥会超时而且答案有问题
#include<stdio.h>
  void main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
  int i,k,index,temp,x;
  scanf("%d",&x);
  a[11]=x;
  for(k=0;k<11;k++)
    k=a[0];
  for(i=k+1;i<11;i++)
  { if(a[i]<a[index])
    index=i;
  }
   temp=a[index];
   a[index]=a[k];
   a[k]=temp;
  for(i=0;i<11;i++)
    printf("%4d",a[i]);
}
   
  
  
  

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-16 22:09:37 | 显示全部楼层
这段代码存在几个问题:

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

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

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

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

下面是修改后的代码:
#include <stdio.h>int main() {    int a[10] = {1, 4, 6, 9, 13, 16, 19, 28, 40, 100};    int i, k, index = 0, temp, x;    scanf("%d", &x);    a[9] = x; // 将x放到数组的最后一个位置    for (k = 0; k < 10; k++) {        if (a[k] == x) {            index = k; // 找到x在数组中的位置            break;        }    }    for (i = k + 1; i < 10; i++) {        if (a[ i] < a[index]) {            index = i; // 找到最小值的位置        }    }    temp = a[k];    a[k] = a[index];    a[index] = temp; // 交换a[k]和a[index]的值    for (i = 0; i < 10; i++) {        printf("%4d", a[ i]);    }    return 0;}
修改后的代码将x放到数组的最后一个位置,然后找到x在数组中的位置,再找到最小值的位置,最后交换a[k]和a[index]的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-17 08:12:25 | 显示全部楼层
大致看了像是把输入值插入到有序数组使数组依然有序。上楼回答的很清楚。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

楼上用的gpt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-21 20:50:56 | 显示全部楼层
for(k=0;k<11;k++)
    k=a[0];
这一步出了问题,你仔细看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-11 04:21:23 | 显示全部楼层

你说的都对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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