c - 双数组 - C 中的编译时错误

标签 c algorithm compiler-errors

问题 给你两个数组,每个数组都包含整数。您需要从 A 中精确选择一个数字,从 B 中精确选择一个数字,这样两个所选数字的索引不相同,并且两个所选值的总和最小。

您的目标是找到并打印这个最小值。

输入格式

第一行包含一个整数,表示两个数组的大小。 接下来的两行中的每一行都包含空格分隔的整数,分别表示数组 和 。

约束

输出格式

打印在问题陈述中提到的条件下可以获得的最小和。

示例输入:

5
5 4 3 2 1
1 2 3 4 5

示例输出:

2

说明:

通过选择第一个数组的最后一个索引和第二个数组的第一个索引处的数字来获得最小总和,即 . 2

解决方案

#include<stdio.h>
#include<stdlib.h>
int lower(int *g,int index,int n){
    int r,low,i;
    if(index!=0){
        low = g[0];
    }
    else
    {
        low = g[1];
    }
    for(i=0;i<n;i++){
        if(i!=-1&&g[i]<low){
            low=g[i];
            r=i;
        }
    }
    return r;
}
int main(){
    int n,al1,al2,bl1,bl2,index,sum=0,i;
    scanf("%d",&n);
    int *a = malloc(n*sizeof(int));
    int *b = malloc(n*sizeof(int));
    for ( i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for (i=0;i<n;i++){
        scanf("%d",&b[i]);
    }
    al1 = lower(a,-1,n);
//  al2 = lower(a,al1,n);
    bl1 = lower(b,-1,n);
    bl2 = lower(b,bl1,n);
    if(al1!=bl1){
        sum=a[al1]+b[bl1];
    }
    else{
        sum = a[al1]+b[bl2];
    }
    printf("%d",sum);
    return 0;
}

注意:我在 Dev C++ 编译器中编译它并得到输出,但是当我在在线编译器中运行它时,我得到编译时错误

最佳答案

如果您链接了您提到的在线编译器,这将很有用,这样有人就可以尝试重现该问题。然而,仅仅看代码,就有一些明显的编译相关问题。

请小心您使用的 C 标准。 C89 标准不允许内嵌注释。

// comments like these should be replaced with 
/* comments like these 
 */

编译时的另一个好习惯是使用-Wall-Werror。这些标志打开所有警告的通知 (-Wall) 并将它们全部视为错误 (-Werror)。一开始这可能很烦人,因为它迫使您强制转换所有内容并删除所有未使用的变量,但随着时间的推移,它会得到返回。正如David Bowling所述,您有 2 个未使用的变量。

一般来说,使用 malloc 和指针时,您还面临运行时错误的风险。由于它有点超出了问题的范围,我只会指出明显的问题:如果您的输入 n = 1,low = g[1]; 将发出 SEGFAULT。

关于c - 双数组 - C 中的编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44617112/

相关文章:

c - 为什么我的用户定义函数在没有 return 语句的情况下也能工作?

algorithm - 降低排序算法中的大 O 复杂度

android - 一行代码上有许多错误?

java - Maven编译: package does not exist

c - 分析字符串中字符的频率

c - 如何从 C 中的十六进制转换为字符串?

c - 打印错误,字符位置混淆,怎么了,循环

algorithm - 对一个序列进行排序,但将某些特定元素按另一种顺序排序

java - 获取给定位置的同一级别的所有可能节点

sql - 从多边形区域中提取的邻居列表