标题:acm 平台的题目求指教
只看楼主
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
晚点回来写给你
2016-11-29 18:52
奥尔良鸡腿
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-11-28
得分:0 
回复 11楼 linlulu001
谢谢大佬
2016-11-29 19:09
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int N,M,T=1;
    while(1)
    {
        scanf("%d%*c",&N);
        if(N>=2&&N<=21) break;
    }
    while(1)
    {
        scanf("%d%*c",&M);
        if(M>=2&&M<=N) 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<M;++i) T*=p[i];        //前M个数的积
    if(T<0&&M!=N)
    {
        int i=0;
        while(p[i]<=0&&i<N) ++i;                    //如果积小于0,找出最大的负数的位置,只存在以下三种情况
        --i;                                       
        if(i<M)    T=T/p[i]*p[M];                        //M个数里有奇数个负数
        else if(i>=M&&i<N-1) T=T/p[M-1]*p[i];        //M个数都是负数,所以只能在M个数之后找一个正数
        else if(i==N-1){                            //N个整数都是负数
            T=1;                                    //重置积
            for(int i=N-1;i>N-M-1;--i) T*=p[i];        //后M个数的积
        }
    }
    printf("%d\n",T);
    free(p);
    return 0;
}


[此贴子已经被作者于2016-11-29 21:42编辑过]

2016-11-29 21:24
奥尔良鸡腿
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-11-28
得分:0 
回复 13楼 linlulu001
这个程序运行不太对啊
2016-11-29 21:31
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
具体哪不对。
2016-11-29 21:33
奥尔良鸡腿
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-11-28
得分:0 
回复 15楼 linlulu001
运行的时候,输入n后再输入数字,不会出现最大乘积,然后再输入一个n才会有结果。。但是结果还是错的
2016-11-29 21:37
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
if(T<0&&M!=N)条件改下。
至于输入的问题你看看代码是怎么写的。
2016-11-29 21:41
奥尔良鸡腿
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-11-28
得分:0 
回复 17楼 linlulu001
可是题目要求的是输入一个n就可以了。。我不太会改啊。。提交的要求很严格
2016-11-29 22:01
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
回复 18楼 奥尔良鸡腿
你举个输入输出的样例,最好注释下。
2016-11-29 22:15
奥尔良鸡腿
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-11-28
得分:0 
回复 19楼 linlulu001
#include<stdio.h>
int main()
{
    int n,i;
    int s[100]
    while(scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",s[i]);
        }   
    }   
}
就是只要输入一个n之后
输入要计算的数字

[此贴子已经被作者于2016-11-29 22:28编辑过]

2016-11-29 22:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-471722-1-1.html




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

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