| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2745 人关注过本帖
标题:acm 平台的题目求指教
只看楼主 加入收藏
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int N,T=1,M=0,Z=0;
    while(1)
    {
        scanf("%d%*c",&N);
        if(N>=2&&N<=21) break;
    }
    int *p=(int *)malloc(sizeof(int)*N);
    for(int i=0;i<N;++i) scanf("%d",&p[i]);            //输入N个数
   
    for(int i=0;i<N-1;++i)            //绝对值从大到小排序
    {
        for(int j=i+1;j<N;++j)
        {
            if(abs(p[i])<abs(p[j]))
            {
                int m=p[i];
                p[i]=p[j];
                p[j]=m;
            }
        }
    }
    for(int i=0;i<N;++i)
    {
        if(p[i]<0) ++M;
        if(p[i]==0) ++Z;
    }
    if(N==2) printf("%d\n",p[0]*p[1]);
    else if(N-Z>2)
    {
        for(int i=0;i<N-Z;++i)   T*=p[i];
        if(M%2)
        {
            int i=N-Z-1;
            while(p[i]>0&&i>=0) --i;
            printf("%d\n",T/p[i]);
        }
        else printf("%d\n",T);
    }
    else printf("%d\n",p[0]*p[1]>0?p[0]*p[1]:0);   
    free(p);
    return 0;
}
你试试吧,不输入m的值,然后计算出积,我只能想到这种情况。如果还不对我就没办法了。

[此贴子已经被作者于2016-11-30 00:36编辑过]

2016-11-29 22:58
奥尔良鸡腿
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-11-28
收藏
得分:0 
回复 21楼 linlulu001
把他改成可以输入多组数据就行啦。我来试试 谢谢大佬
2016-11-29 23:03
奥尔良鸡腿
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-11-28
收藏
得分:0 
回复 21楼 linlulu001
这个程序它不对 输入 0 -2 3 1的时候结果是0。。。
2016-11-29 23:29
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 9楼 奥尔良鸡腿
这就有关系了吧。

程序代码:
#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b)
{
    return *(long *) a - *(long *) b;
}

long fun(long sn[], size_t n, size_t m)
{
    long ans = 1;

    qsort(sn, n, sizeof(long), cmp);

    if (m % 2) ans = sn[--m, --n];

    size_t lpos = 0, rpos = n - 1;
    long left = sn[lpos] * sn[lpos + 1], right = sn[rpos] * sn[rpos - 1];

    for (size_t i = 0; i < m / 2; ++i)
    {
        if ((left < right) == (ans > 0))
        {
            ans *= right;

            rpos -= 2;
            right = sn[rpos] * sn[rpos - 1];
        }
        else
        {
            ans *= left;

            lpos += 2;
            left = sn[lpos] * sn[lpos + 1];
        }
    }
    return ans;
}

void print(long sn[], size_t n, size_t m)
{
    printf("[%ld", sn[0]);
    for (size_t i = 1; i < n; ++i)
    {
        printf(", %ld", sn[i]);
    }
    printf("](%zu) = %ld\n", m, fun(sn, n, m));
}

int main(int argc, char *argv[])
{
    long test1[] = {1, 2, 3, 4, 5, 6};
    print(test1, 6, 4);

    long test2[] = {1, 2, 3, 4, 5, -6};
    print(test2, 6, 4);

    long test3[] = {1, 2, 3, 4, -5, -6};
    print(test3, 6, 4);

    long test4[] = {1, 2, 3, -4, -5, -6};
    print(test4, 6, 4);

    long test5[] = {1, 2, 3, 4, 5, 6};
    print(test5, 6, 3);

    long test6[] = {1, 2, 3, 4, 5, -6};
    print(test6, 6, 3);

    long test7[] = {1, 2, 3, 4, -5, -6};
    print(test7, 6, 3);

    long test8[] = {1, 2, 3, -4, -5, -6};
    print(test8, 6, 3);

    long test9[] = {-1, -2, -3, -4, -5, -6};
    print(test9, 6, 3);

    return 0;
}


[此贴子已经被作者于2016-11-30 09:40编辑过]



[fly]存在即是合理[/fly]
2016-11-30 09:38
快速回复:acm 平台的题目求指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065334 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved