您的位置:首页 > 编程语言 > C语言/C++

C语言 · 最大乘积

2017-02-24 21:44 260 查看
算法提高最大乘积

时间限制:1.0s内存限制:512.0MB

问题描述
  对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
输入格式
  第一行一个数表示数据组数
  每组输入数据共2行:
  第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
  第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
输出格式
  每组数据输出1行,为最大的乘积。
样例输入
1
55
12342
样例输出
48

解题思路:输入数组,先排序,将处理后的数组的前m个数的积输出。


1#include<stdio.h>
2voidMaoPao_Down(inta[],intn)
3{
4inti,j,temp;
5for(j=0;j<n-1;j++)
6for(i=0;i<n-1-j;i++)
7if(a[i]<a[i+1])
8{temp=a[i];a[i]=a[i+1];a[i+1]=temp;}
9}
10intmain(){
11intcount;
12intn,m;
13
14inta[20];
15scanf("%d",&count);
16while(count--){
17scanf("%d%d",&n,&m);
18for(inti=0;i<n;i++){
19scanf("%d",&a[i]);
20}
21intJI=1,temp1,temp2;
22MaoPao_Down(a,n);
23for(intj=n-1,k=0;m>0;){
24if(m>=2){
25temp1=a[j]*a[j-1];
26temp2=a[k]*a[k+1];
27if(temp1>=temp2){
28JI*=temp1;
29m-=2;
30j-=2;
31}else{
32JI*=a[k++];
33m--;
34}
35}else{
36JI*=a[k++];
37m--;
38}
39}
40printf("%d",JI);
41printf("\n");
42}
43}





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: