大学之道,在明明德,在亲民,在止于至善。werewolf.blog.chinaunix.net
biti-leaf
全部博文(127)
分类:
2010-06-20 15:37:34
#include <stdio.h> #include <limits.h> #define MINNUM INT_MIN #define MAXNUM INT_MAX int max_multiply(int *a, int n) { int positives = 0; int negitives = 0; int zeros = 0; int minp; int maxn, minn; int i; int not_use; int sum = 1; int del = 0; minp = MAXNUM; maxn = MINNUM; minn = 0; //统计0的个数 //负数的个数,负数的最小值,最大值 //正数的个数,正数的最小值,最大值 for (i=0; i<n; i++) { if (a[i] > 0) { positives++; if (a[i] < minp) minp = a[i]; } else if (a[i] < 0) { negitives++; if (a[i] > maxn) maxn = a[i]; if (a[i] < minn) minn = a[i]; } else if (a[i] == 0) { zeros++; } } //如果有0的存在 if (zeros != 0) {
//并且0的个数不止1个,返回0 if (zeros > 1) return 0; //只有一个0 else { //负数为奇数个,直接返回0 if (negitives&0x1) return 0; else//除去0 not_use = 0; } } //没有0 else { //负数的个数是奇数,除去负数的最大值 if (negitives&0x1) not_use = maxn; //负数的个数是偶数,如果有正数,去除一个正数最小值,否则,去除一个负数最小值 else { if (positives > 0) not_use = minp; else not_use = minn; } } for (i=0; i<n; i++) { if ( (a[i] == not_use) && (!del) ) { del = 1; continue; } sum *= a[i]; } return sum; } int main() { int a[] = {-1, -5, -3, 1, 3, 0, 0, 2, 4, 2}; printf("%d\n", max_multiply(a, 10)); return 0; }
上一篇:不要被阶乘吓倒
下一篇:程序理解和时间分析
登录 注册