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
样例输出
时间限制: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}
相关文章推荐
- C语言 · 最大最小公倍数
- C语言 · 最大值与最小值计算
- C语言 · 最大子阵
- C语言 · 算年龄
- 【编程之美】2.13 子数组的最大乘积
- 1037. Magic Coupon (25) 利用排序求解最大乘积和
- 蓝桥杯--乘积最大(数字DP)
- UVa 11059 最大乘积 java 暴力破解
- 最大乘积
- 划分型动态规划 之 CODE[VS] 1017 乘积最大 2000年NOIP全国联赛提高组
- P1018 乘积最大
- 最大K乘积问题
- wikioi 1017--乘积最大
- 算法提高 最大乘积
- Python实现:选出列表中乘积最大的三个数和最小的三个数
- leetcode 318. Maximum Product of Word Lengths 字符串长度乘积最大解 + 位向量来确定交集
- 动态规划 - 区间DP - NOIP 乘积最大
- Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- 若干个不同的自然和为定值,这些自然数乘积最大为多少?
- 最大乘积