Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180074
  • 博文数量: 43
  • 博客积分: 611
  • 博客等级: 中士
  • 技术积分: 1053
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-02 13:37
文章存档

2015年(3)

2013年(23)

2012年(17)

我的朋友

分类: C/C++

2012-12-27 16:45:42

         问题描述:假设有一个数组x[],它有n个元素,每一个都大于零;称x[0]+x[1]+.....+x[i]为前置和,而x[j]+x[j+1]+....+x[n-1]为后置和。编写程序,求出x[]中有多少组相同的前置和与后置和。

         我的思路:因为这个数组都是正数,那么,对于i越大,前置和也就越大;后置和是j越小,那么后置和越大。接下来就很简单了,当以x[i]为终点的前置和大于以x[j]为起点的后置和时,j需要减去1,同理可得小于的情况。代码如下:


  1. #include <stdio.h>
  2.  
  3.  int x[]={3,6,2,1,4,5,2};
  4.  
  5.  int main()
  6.  {
  7.      int index_pre,index_suf;
  8.      int sum_pre=0,sum_suf=0;
  9.      int len_x=sizeof(x)/sizeof(int);
  10.      int count=0;
  11.      for(index_pre=0,index_suf=len_x-1;index_pre<len_x && index_suf>-1;)
  12.      {
  13.          if(sum_pre==sum_suf)
  14.          {
  15.              count++;
  16.              sum_pre+=x[index_pre++];
  17.              sum_suf+=x[index_suf--];
  18.          }
  19.          else if(sum_pre<sum_suf)
  20.              sum_pre+=x[index_pre++];
  21.          else
  22.              sum_suf+=x[index_suf--];
  23.      }
  24.      printf("result:%d\n",count);
  25.      return 0;
  26.  }
       如果你觉得我的文章对你有帮助,请顶一下,非常感谢!

阅读(1243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~