在C中的数组上找不到两个数字之间最小差异的错误

时间:2016-05-14 05:50:37

标签: c arrays

所以我真的很喜欢编程。我需要编写一个程序,如果我给它任何整数数组,它将能够找到彼此最接近的两个数字,然后给出这两个数字之间的差异。此外,第一个数字必须是将在数组中的整数数。

所以例如,我给它3 1 4 8.前3意味着将有三个整数,所以它必须在这三个之间找到最接近的两个数字。在这种情况下,它是4 - 1 = 3,所以输出应该是3,但是当我写它时它给我16。

这就是我所拥有的,我不知道出了什么问题:

#include <stdio.h>
#include <stdlib.h>

int main() {

    int n, i;

    printf("Write numbers here\n");
    scanf("%d", &n);

    int st[n];

    for(i=0;i<n;i++)
        scanf("%d",&st[i]);

    int a, b, str[n*n], minimum, c;

    /* here I'll make a new array, and its elements will be all the
      differences between all the elements of the previous one */

    for(a=0;a<n;a++)
        for(b=0+a*n;b<n;b++) {
            if(st[b-a*n]==st[a])
                str[b]=32000;
            else 
                str[b]=abs(st[b-a*n]-st[a]);
        }

    // here I'll find the smallest element on the last made array

    minimum = str[0];

    for(c=0;c<n*n;c++)
    {
        if(str[c]<minimum); 
        {
            minimum=str[c];
        }
    }
    printf("%d", minimum);

    return 0;

}

编辑:我尝试用你的答案修复它,但它仍然不起作用。 新代码:

#include <stdio.h>
#include <stdlib.h>

int main() {

    int n, i;

    printf("Write numbers here\n");
    scanf("%d", &n);

    int st[n];

    for(i=0;i<n;i++)
        scanf("%d",&st[i]);

    int a, b, minimum;

    minimum = st[0];

    for(a=0;a<n;a++)
        for(b=0;b<n;b++) {
            if((st[b] != st[a]) && (abs(st[b]-st[a]))<minimum) 
                minimum = abs(st[b]-st[a]);
        }

    printf("%d", minimum);

    return 0;
}

编辑2:好的,我现在修好了。非常感谢^^

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main() {

    int n, i;

    printf("write numbers here\n");
    scanf("%d", &n);

    int st[n];

    for(i=0;i<n;i++)
        scanf("%d",&st[i]);

    int a, b, minimum;

    minimum = INT_MAX;

    for(a=0;a<n;a++)
        for(b=a+1;b<n;b++) {
            if((abs(st[b]-st[a]))<minimum)
                minimum = abs(st[b]-st[a]);
        }

    printf("%d", minimum);

    return 0;
}

0 个答案:

没有答案