整型数组中三个数的最大乘积

题目:给定一个整形数组,在数组中找出由三个数组成的最大乘积。

示例1:
输入:{1,2,3}
输出: 6
示例2:{1,2,3,4}
输出: 24

**
思路:先给数组排序,最大的数分为两种情况,一种是全为正数和全为负数,排序后最大的三个数相乘即为结果;另一种是有正有负,取两位最小的负数和最大
的正数相乘的结果和最大的三个数相乘的结果比较,大的即为结果**

C代码:

#include<stdio.h>
#define N 4
int main()
{
 int i,j;
 int result=1,result1,result2;
 int Array[N];
 for(i=0;i<N;i++)
 {
  scanf("%d",&Array[i]);
 }
 if(N<=3)
 {
  for(i=0;i<N;i++)
  {
   result*=Array[i];
  }
 }
 else
 { 
  for(i=0;i<N-1;i++)
  {
   for(j=0;j<N-i-1;j++)
   {
    if(Array[j] < Array[j+1])
    {
     int temp=Array[j+1];
     Array[j+1]=Array[j];
     Array[j]=temp;
    }
   }
  }
  result1=Array[0]*Array[1]*Array[2];
  result2=Array[N-1]*Array[N-2]*Array[0]; 
  if(result1>=result2)
   result=result1;
  else
   result=result2; 
 } 
 printf("%d",result);
 return 0; 
}
结果示例:
输入:-1 -3 7 -9
输出:189
输入:1 3 -2 -3
输出:18

Java代码(网上找的):

public  class 三个数的最大乘积 {
    public static int 三个数的最大乘积(int[] nums) {
        int max1 = Integer.MIN_VALUE;
        int max2 = Integer.MIN_VALUE;
        int max3 = Integer.MIN_VALUE;
        int min1 = Integer.MAX_VALUE;
        int min2 = Integer.MAX_VALUE;
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            if (nums[i] > max1) {
                max3 = max2;
                max2 = max1;
                max1 = nums[i];
            } else if (nums[i] > max2) {
                max3 = max2;
                max2 = nums[i];
            } else if (nums[i] > max3) {
                max3 = nums[i];
            }
            if (nums[i] < min1) {
                min2 = min1;
                min1 = nums[i];
            } else if (nums[i] < min2) {
                min2 = nums[i];
            }
        }
        int max = max1 * max2 * max3;
        int min = max1 * min1 * min2;
        return max > min ? max : min;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int a[] = new int[N];
        for (int i = 0; i < N; i++)
            a[i] = sc.nextInt();
        System.out.println(三个数的最大乘积(a));
    }
}

知识点:数组,数学
本结果的缺点是冒泡排序的时间复杂度比较高,亦可以采用其它的排序方法。

发布了20 篇原创文章 · 获赞 10 · 访问量 1697

猜你喜欢

转载自blog.csdn.net/qq_43941925/article/details/94555346