大神,留步!!!

xsx1658434078 2017-12-01 02:41:45
给你n(n>=2)个整数,在其中任意选择m(m>=2)个整数,这m个整数的乘积为t,求最大的t。
输入
测试包含多组数据直到文件结束。每组数据占两行,第一行包含一个整数n(2<=n<21),第二行包含n个整数。
输出
每组输出占一行,包含一个整数t。
样例输入
4
1 2 3 -1
2
1 2
样例输出
6
2

#include<stdio.h>
int main()
{
int a[100],b[100];
int i,j,k,n,m,max;
while (scanf("%d", &n) != EOF)
{
j = 0;
m=1;
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (a[i]!=0)
m=m*a[i];
}
if(n==2&&a[i]==0)
printf("%d\n",n-2);
if (m>0)
printf("%d\n", m);
{
for (i = 0; i < n; i++)
{
if (a[i] < 0)
{
b[j++] = a[i];
}
max = b[0];
k = j;
for (j = 0; j<k; j++)
{
if (b[j]>max)
max = b[j];
}
}
m = m/max;
printf("%d\n",m);
}
}
return 0;
}

哪位大佬,帮我看一下这题应该怎么做,我的思路是不是错了,程序哪里有问题?
...全文
186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsx1658434078 2017-12-01
  • 打赏
  • 举报
回复
我又改了一下程序,试了几组数据,自己运行的结果正确了,但是提交到平台上却答案错误,不知哪里错了,哪位大佬可以帮看一下 #include<stdio.h> int main() { int a[30],b[30]; int i,j,k,n,m,max; while (scanf("%d", &n) != EOF) { j = 0; m=1; if(n==2) { for(i=0;i<n;i++) { scanf("%d",&a[i]); m=m*a[i]; } printf("%d\n",m); } if(n>2) { for (i = 0; i < n; i++) { scanf("%d", &a[i]); if (a[i]!=0) m=m*a[i]; } if(m>0) printf("%d\n",m); if(m<0) for (i = 0; i < n; i++) { if (a[i] < 0) { b[j++] = a[i]; } } max = b[0]; k=j; for (i = 1; i<k; i++) { if (b[i]>max) max = b[i]; } m = m/max; printf("%d\n",m); } } return 0; }
qq_41234263 2017-12-01
  • 打赏
  • 举报
回复
我觉得可以先判断正负,然后分别累乘,最后比较两个乘积大小
xsx1658434078 2017-12-01
  • 打赏
  • 举报
回复
@suhua_

小于0的也要乘的,因为有负负得正的情况呀
suhua_ 2017-12-01
  • 打赏
  • 举报
回复
我也是小白一枚呀,我觉得你这个问题不用那么复杂,只需要判断a[i]是否大于0,大于0的累乘就可以啦 两行数据也是一样的 希望对你有帮助
xsx1658434078 2017-12-01
  • 打赏
  • 举报
回复
不懂,不知为什么运行的时候会出现2,-2两个答案的情况,谁能分享一下自己的程序啊,不过本人是C语言小白,太难的会看不懂
paschen 2017-12-01
  • 打赏
  • 举报
回复
单步跟踪程序运行,观察变量变化情况是否与你期望的一致,然后分析原因

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧