问题描述
- 关于求一维数组里所有两元素之和的最小绝对值,求指点
- 题目详情
给你一个数组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;
}