Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98147
  • 博文数量: 29
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 476
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-07 15:10
文章分类

全部博文(29)

文章存档

2011年(1)

2008年(28)

我的朋友

分类: C/C++

2008-08-17 16:04:14

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

#include <stdio.h>

void print_equal(int x[], int nx, int pre, int suf)
{
    for(int i=0; i<pre-1; i++)
        printf("%d+",x[i]);
    printf("%d=",x[pre-1]);

    for(i=nx-1; i>suf+1; i--)
        printf("%d+",x[i]);
    printf("%d\n",x[suf+1]);
}

int main()
{
    int x[] = {1,3,6,2,1,4,5,2,1};
    int nx = sizeof(x)/sizeof(int);
    int pre_sum = 0, suf_sum = 0;

    int pre = 0,suf = nx-1;

    while(pre<=nx-1 && suf>=0)
    {
        if(pre_sum < suf_sum)            
        {
            pre_sum = pre_sum + x[pre];
            pre++;
        }
        else if(pre_sum > suf_sum)            
        {
            suf_sum = suf_sum + x[suf];
            suf--;
        }
        else
        {       
            if(pre_sum != 0)
            {
                print_equal(x,nx,pre,suf);
            }
            pre_sum = pre_sum + x[pre];
            suf_sum = suf_sum + x[suf];
            
            pre++; suf--;
        }
    }
    print_equal(x,nx,nx,-1);    //最后pre值为nx,suf值为-1

    return 0;
}

阅读(1139) | 评论(0) | 转发(0) |
0

上一篇:两数组最短距离

下一篇:Armstrong数

给主人留下些什么吧!~~