简单题目,看出错误的接分

dawnhorizon 2003-05-26 07:16:24
还是zoj的题目,问题是做出来后不知道哪里错!这样的结果最让人郁闷了,做acm的兄弟们,你们说是不是?
http://acm.zju.edu.cn/show_problem.php?pid=1569
意思是给出一串整数个数和一个整数(m),接着给出那串整数,让求它们的和里面,有几个可以被m整除.
偶的代码:

#include <iostream.h>
const int MAX=10001;
const int NUM=5001;
int main()
{
int a[MAX];
int sum[MAX];
int big[NUM];
int n,m;
while (cin>>n>>m)
{
if (n==0)
{
cout<<0<<endl;
}else
{
int i;
for (i=0;i<NUM;i++)
big[i]=0;
for (i=0;i<MAX;i++)
sum[i]=0;
cin>>a[0];
sum[0]=a[0]%m;
big[sum[0]]++;
for (i=1;i<n;i++)
{
cin>>a[i];
sum[i]=(sum[i-1]+a[i])%m;
big[sum[i]]++;
}

int num=big[0];
for (i=0;i<n;i++)
{
if (big[i]>0)
num+=big[i]*(big[i]-1)/2;
}
cout<<num<<endl;
}
}
return 0;
}

大家给看看,哪里错了,有通过的给出源码也可以:)
...全文
36 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lymgf 2003-05-29
  • 打赏
  • 举报
回复
今天提交了1下,发现是我错了,楼主的方法是对的,只是犯了个低级错误:

for (i=0;i<n;i++) //应为i<m;
{
if (big[i]>0)
num+=big[i]*(big[i]-1)/2;
}

ywqzxj 2003-05-27
  • 打赏
  • 举报
回复
这类问题没有太大的难度,还是自己细心做的好。

如果求最优算法,那还有点研究头,不过意义不大
lymgf 2003-05-27
  • 打赏
  • 举报
回复
楼主题目理解错了,题目要求的是下标连续的数之和
如a[1....n]
Partial Sum为
a[i]+a[i+1]+a[i+2]+......+a[j] (1<=i<=j<=n)
dawnhorizon 2003-05-26
  • 打赏
  • 举报
回复
我的想法就是搜集前面的和模m的余数,余数相同的,之差就可以整除m

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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