航航. 发表于 2022-10-8 10:53:30

c语言 bug

大佬们,我这个程序是求两数组间最小距离的,然后有bug,求值是错的,我感觉我编写的好像没啥问题,大佬们能帮我看看吗

样例输入



5 5
1 2 3 4 5
6 7 8 9 10





#include<stdio.h>
#include<math.h>

//计算两数组间最小间隔
int main(void)
{
        int m, n;
        int arr_m, arr_n;
        int min;
        int a;

        scanf("%d%d", &m, &n);

        for (int i = 0; i < m; i++)
        {
                scanf("%d", &arr_m);
        }
        for (int i = 0; i < n; i++)
        {
                scanf("%d", &arr_n);
        }

        //循环嵌套
        for (int i = 0; i < m; i++)
        {
                for (int j = 0; j < n; j++)
                {
                        if (i == 0 && j == 0)
                        {
                                min = fabs(arr_m - arr_n);
                        }
                        if (fabs((arr_m - arr_n) < min))
                        {
                                min = fabs(arr_m - arr_n);
                        }
                }
        }
        printf("%d", min);

        return 0;
}

dolly_yos2 发表于 2022-10-8 11:02:56

看一下第 32 行的判断条件想表达什么?

航航. 发表于 2022-10-8 11:11:07

dolly_yos2 发表于 2022-10-8 11:02
看一下第 32 行的判断条件想表达什么?

当发现两个两个数组中的数相减的绝对值小于已发现的最小值的时候,最小值改为这两个数的差的绝对值,是我的表达式写的有问题吗?

jackz007 发表于 2022-10-8 11:14:19

      什么是“两个数组间的最小距离”,请楼主以提供的样例数据为例,说明一下,就这 2 组数据而言,预期的正确结果是什么?

航航. 发表于 2022-10-8 11:19:02

jackz007 发表于 2022-10-8 11:14
什么是“两个数组间的最小距离”,请楼主以提供的样例数据为例,说明一下,就这 2 组数据而言,预期 ...

https://s1.ax1x.com/2022/10/08/x8oPsA.png

dolly_yos2 发表于 2022-10-8 11:51:08

航航. 发表于 2022-10-8 11:11
当发现两个两个数组中的数相减的绝对值小于已发现的最小值的时候,最小值改为这两个数的差的绝对值,是我 ...

是的,至少这个表达式实际的含义和您描述的并不相符

jackz007 发表于 2022-10-8 11:57:21

本帖最后由 jackz007 于 2022-10-8 12:00 编辑

      第 32 行有误
                        if (fabs((arr_m - arr_n) < min))
      应该改为:
                        if (fabs(arr_m - arr_n) < min)
      楼主试试这个代码
#include <stdio.h>

int main(void)
{
      int d , e , i , j , m , n                                     ;
      scanf("%d%d" , & m , & n)                                     ;
      int a , b                                             ;
      for(i = 0 ; i < m ; i ++) scanf("%d" , & a)                ;
      for(i = 0 ; i < n ; i ++) scanf("%d" , & b)                ;
      for(d = (a > b) ? a - b : b - a , i = 0 ; i < m ; i ++) {
                for(j = 0 ; j < n ; j ++) {
                        e = (a > b) ? a - b : b - a ;
                        if(e < d) d = e                               ;
                }
      }
      printf("%d\n" , d)                                          ;
}

航航. 发表于 2022-10-8 13:04:40

本帖最后由 航航. 于 2022-10-8 13:12 编辑

dolly_yos2 发表于 2022-10-8 11:51
是的,至少这个表达式实际的含义和您描述的并不相符

航航. 发表于 2022-10-8 13:13:35

jackz007 发表于 2022-10-8 11:57
第 32 行有误

      应该改为:


好的好的,对了,谢谢大佬哈,没看出来那个括号的问题
页: [1]
查看完整版本: c语言 bug