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

问题描述

关于求一维数组里所有两元素之和的最小绝对值,求指点
题目详情
给你一个数组A[n]请你计算出ans=min(|A[i]+A[j]|)(0<=ij例如: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 ijnmin=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;
}
结果失败了,求指点!

解决方案

 int a[n]这么定义数组是不行的,C定义数组的时候N得是常量。 动态接收的数组通过 int *p = (int *)malloc(n*sizeof(int));方式生成

解决方案二:
动态规划(当然也可以死算),参考
http://blog.csdn.net/njufeng/article/details/25568947
略有不同,修改下

解决方案三:
用以下代码试试

#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;}

解决方案四:
最小值应该初始化为一个很大的值才行!!!!!!!!!!!!

#include
#include

void main(){
int n;
int min = 10000;
scanf(""%d""&n);
int a[100];
for(int i=0;i<n;i++)
scanf(""%d""&a[i]);
for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(abs(a[i]+a[j])<min)
min=abs(a[i]+a[j]);
}
}
printf(""%dn""min);
}

解决方案五:
// input an array a[len]
// output minimum distance between array elements
// version 1.
int minInnerDistance( int a[] int len )
{
int m = abs(a[0]-a[1]);
for( int i=0; i<len; i++ ){
for( int j=i+1; j<len; j++ ){
int dist = abs( a[i] - a[j] );
if( dist<m )
m = dist;
}
}
return m;
}
// version 2. using pointers so it can be much faster
int minInnerDistance( int a[] int len )
{
int m = a[0]<a[1] ? a[1]-a[0] : a[0]-a[1];
int *p = a;
for( int i=0; i<len; i++ ){
int &ai = *(p++);
int *p2 = p + 1;
for( int j=i+1; j<len; j++ ){
int &aj = *(p2++);
int dist = ai<aj ? aj-ai : ai-aj;
if( dist<m )
m = dist;
}
}
return m;
}

解决方案六:

时间: 2024-12-28 01:42:08

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

js实现从数组里随机获取元素

 这篇文章主要介绍了js实现从数组里随机获取元素的方法,以及个人封装的js代码分享,十分的实用,这里推荐给小伙伴们     基础知识: 复制数组: (1)循环遍历复制(不推荐)   代码如下: var arry = [1,5,9,7], new_arry = [], n = 0, len = arry.length; for(;n<len;n++){ new_arry.push(arry[n]); }   (2)concat() 方法用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回

c++ 指针-C++中数组指针怎么输出每一个所谓的一维数组的头一个元素

问题描述 C++中数组指针怎么输出每一个所谓的一维数组的头一个元素 #includeusing namespace std;int main(){int a[3][4] = {{1357}{9111315}{17192122}};int (* p)[4];for(p = a; p < a + 3; p++){cout << ((p + 0)) << "" "";cout << *p <<endl;}cout &l

js实现从数组里随机获取元素_javascript技巧

基础知识: 复制数组: (1)循环遍历复制(不推荐) 复制代码 代码如下: var arry = [1,5,9,7],     new_arry = [],     n = 0,     len = arry.length; for(;n<len;n++){     new_arry.push(arry[n]); } (2)concat() 方法用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本 复制代码 代码如下: var arry = [1,5,9,7],  

编程c语言-求一个把bmp图像灰度化并把灰度化后的像素存入数组里的C语言函数,不用opencv

问题描述 求一个把bmp图像灰度化并把灰度化后的像素存入数组里的C语言函数,不用opencv 求一个把bmp图像灰度化并把灰度化后的像素存入数组里的C语言函数,不用opencv 解决方案 顶顶顶顶顶顶顶顶顶顶

java-有一个数组,数组里任意个数数字相加等于一固定数值,求出所有可能性的任意数字组合?

问题描述 有一个数组,数组里任意个数数字相加等于一固定数值,求出所有可能性的任意数字组合? 最近遇到一道java算法题,给定一个数组,求出数组里任意个数相加等于一固定数值,求出所有可能性的任意数字组合?求解答,用最原始的算法做出这道题,求大神指点,大神给出答案? 解决方案 /** * * @param arr * 数组 * @param num * 固定值 * @return 组合 */ public static List a(int[] arr, int num) { List strLis

一维数组求最大最小值

问题描述 一维数组求最大最小值 using System; using System.Collections.Generic; using System.Text; namespace 一维数组求最大值最小值 { class Program { static void Main(string[] args) { int[] quene = new int[10] {89,78,65,52,90,92,73,85,91,95 }; int max, min; max = min = quene[0

详解C++中的一维数组和二维数组_C 语言

C++一维数组 定义一维数组 定义一维数组的一般格式为:     类型标识符  数组名[常量表达式]; 例如: int a[10]; 它表示数组名为a,此数组为整型,有10个元素. 关于一维数组的几点说明: 1) 数组名定名规则和变量名相同,遵循标识符定名规则. 2) 用方括号括起来的常量表达式表示下标值,如下面的写法是合法的: int a[10]; int a[2*5]; int a[n*2]; //假设前面已定义了n为常变量 3) 常量表达式的值表示元素的个数,即数组长度.例如,在"int

c++按列读取文件-c++从一两列文件按列读取数据到两一维数组中

问题描述 c++从一两列文件按列读取数据到两一维数组中 数据如下: 0.00 882.197 8.35 877.375 15.66 871.794 27.24 864.176 37.27 855.956 41.28 852.139 43.72 848.769 55.84 838.139 71.62 825.459 82.78 820.639 98.28 817.389 109.84 817.409 125.86 817.949 136.84 817.469 152.48 817.829 163.

函数-编写程序从键盘输入10个float类型数存入一维数组a中,求这10个数的平均值,

问题描述 编写程序从键盘输入10个float类型数存入一维数组a中,求这10个数的平均值, 编写程序从键盘输入10个float类型数存入一维数组a中,求这10个数的平均值,然后用函数aver实现平均值计算,输出这10个数以及平均值,要求数组和元素个数作为参数传递. 声明函数avar: (3)主函数输入10个数据,用for循环语句输入: 解决方案 你能不能再懒点?发了这个问题编写程序,从键盘输入10个int类型数,按从小到大顺序进行排序,然后输出,都有答案了,整数改成浮点的自己都不改. 解决方案二