标题:输入一字母系列如:A B C D E,从中任意选两个字母用括号将它们括起来。
只看楼主
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define N 1000
int d[N] = {}, n;

void printans()
{
    int i, j;

    for (i = 0; i < n; ++i)
    {
        if (d[i] > 0)
        {
            for (j = 0; j < d[i]; ++j) printf("(");
            printf("%c", 'A' + i);
        }
        else if (d[i] < 0)
        {
            printf("%c", 'A' + i);
            for (j = d[i]; j < 0; ++j) printf(")");
        }
    }
    printf("\n");
}

void solve(int start, int end)
{
    if (start == 0 && end == n - 1)
    {
        printans();
        return;
    }

    if (start > 0)
    {
        start -= 1; d[start] += 1; d[end] -= 1;
        solve(start, end);
        d[end] += 1; d[start] -= 1; start += 1;
    }

    if (end < n - 1)
    {
        end += 1; d[start] += 1; d[end] -= 1;
        solve(start, end);
        d[end] += 1; d[start] -= 1; end -= 1;
    }
}

int main(void)
{
    while (scanf("%d", &n) != EOF)
    {
        int i;

        for (i = 0; i < n; ++i)
            d[i] = 0;

        for (i = 1; i < n; ++i)
        {
            d[i - 1] += 1; d[i] -= 1;
            solve(i - 1, i);
            d[i - 1] -= 1; d[i] += 1;
        }
    }

    return 0;
}


我也凑个热闹好了…………

专心编程………
飞燕算法初级群:3996098
我的Blog
2010-08-26 23:31
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
~ ~
2010-08-27 00:28



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




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

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