-凡星- 2015-04-22 14:19 采纳率: 0%
浏览 2595

关于求一维数组里所有两元素之和的最小绝对值,求指点

题目详情
给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0<=i,j 例如:A={1, 4, -3},
则:
|A[0] + A[0]| = |1 + 1| = 2.
|A[0] + A[1]| = |1 + 4| = 5.
|A[0] + A[2]| = |1 + (-3)| = 2.
|A[1] + A[1]| = |4 + 4| = 8.
|A[1] + A[2]| = |4 + (-3)| = 1.
|A[2] + A[2]| = |(-3) + (-3)| = 6.
所以ans=1.
输入描述:
有多组测数数据,每组数据有两行,第一行包含一个正整数n(0 输入以文件结束。
输出描述:
对于每组数据,输出相应的答案。
答题说明
输入样例:
3
1 4 -3
1
2
3
-1 -2 -5
3
1 2 3
2
0 5
输出样例:
1
4
2
2
0
我的代码:
#include
#include
int main()
{
int i,j,n,min=0;
while(scanf("%d",&n)==1){
int A[n];
/*数组初始化*/
for(i=0;i<n;i++){
scanf("%d",A[i]);
}
/*求最小的每俩元素之和的绝对值*/
for(j=0;j<n;j++){
for(i=0;i<n;i++){

        if(abs(A[i]+A[j])<min)
           min=abs(A[i]+A[j]);
        }
 }
 printf("%d",min);

}
return 0;
}
结果失败了,求指点!

  • 写回答

6条回答

  • WorldMobile 2015-04-22 14:28
    关注

    用以下代码试试

    #include 
    #include 
    int main()
    {
        int i, j, n, min = 0;
        while(scanf("%d",&n)==1){
            int A[n];
            /*数组初始化*/
            for(i=0; i<n; i++){
                scanf("%d", A[i]);
            }
            /*求最小的每俩元素之和的绝对值*/
            min = 0;
            for(j=0; j<n; j++){
                for(i=0; i<n; i++){
                    if (j==0 and i==0){
                        min = min=abs(A[i]+A[j]);
                    }
                    else {
                        if(abs(A[i] + A[j]) < min)
                            min = abs(A[i] + A[j]);
                    }
                }
            }
            printf("%d",min);
        }
        return 0;
    }
    
    评论

报告相同问题?