首页 新闻 会员 周边

C++解决 很急

1
悬赏园豆:20 [待解决问题]

Description

Johnny Q最心爱的女孩GJ被其情敌CK掳到了HFUT翡翠湖城堡,为了夺回自己的爱人,Johnny Q依然决定深入虎穴救出GJ

现在,他来到了城堡的面前,很好没人发现他。可是城堡的大门是高科技产品,需要一个密码才能打开。Johnny Q曾听DJ说过CK是个酷爱数学的人,所以他用了一个很猥琐的密码: (X+Y)^N的展开式.这下Johnny Q囧了。不过幸好他的电话支持3G功能,于是他打视频电话向你求助,聪明的你能帮助他么?

 

Input

输入的第一行是一个整数T, 代表有T组测试数据.

接下来每行有个整数N,代表(X+Y)的次数(1<= N <= 30)

 

Output

输出(X+Y)^N的展开式.展开式中的一次项省略其次数,(X+Y)^2展开后为X^2+2XY+Y^2,每项与+之间均无空格,仅在最后一项后有一个回车.

 

Sample Input

2

1

2

 

Sample Output

X+Y

X^2+2XY+Y^2

 

 

 

 

C++
朱婷婷的主页 朱婷婷 | 初学一级 | 园豆:84
提问于:2012-06-01 15:54
< >
分享
所有回答(2)
-1

对于(x+y)^n,可以表示为:

求和 ki*x^i * y^(n-i)

这里:

ki表示第i项的系数,i的取值范围:0-n,并且有k0=kn=1, k1=k(n-1)=n,k2=k(n-2)

对于k(i,n),恒有:k(0,n)=k(n,n)=1, k(1, n)=k(n-1, n) = n, k(i, n)=k(i-1, n-1) + k(i, n-1)

特别的,

当n为基数时,k([n/2], n) = k({n/2}, n),且为最大

当n为偶数时,有k(n/2, n)最大,且k(n/2, n) = 2*k([(n-1)/2], n-1)

 

根据以上数学模型,写一个迭代函数,确定各项系数即可得到结果。

无之无 | 园豆:5095 (大侠五级) | 2012-06-01 17:19

可以麻烦把迭代程序发给咱不,我逻辑思维很差 绕不过来啦 谢谢

支持(0) 反对(0) 朱婷婷 | 园豆:84 (初学一级) | 2012-06-01 21:33
0

写了个C#版的,你自己改成C++吧:

static void Main(string[] args)
{
    BinomialTheorem(1);
    BinomialTheorem(2);
    BinomialTheorem(3);
    BinomialTheorem(4);
    BinomialTheorem(5);
    BinomialTheorem(6);
    Console.Read();
    /*
     X+Y
     X^2+2XY+Y^2
     X^3+3X^2Y+3XY^2+Y^3
     X^4+4X^3Y+6X^2Y^2+4XY^3+Y^4
     X^5+5X^4Y+10X^3Y^2+10X^2Y^3+5XY^4+Y^5
     X^6+6X^5Y+15X^4Y^2+20X^3Y^3+15X^2Y^4+6XY^5+Y^6
     */
}

public static void BinomialTheorem(int n)
{
    var index= GetIndex(n);
    n++;
    for (var j = 1; j < index.GetLength(1); j++)
    {
        if (index[n, j] != 0)
        {
            if (j == 1)
            {
                Console.Write("X" + (n - 1 > 1 ? "^" + (n - 1) : ""));
            }
            else if (j > 1 && index[n, j] == 1)
            {
                Console.Write("+Y" + (n - 1 > 1 ? "^" + (n - 1) : ""));
            }
            else
            {
                Console.Write("+" + index[n, j] + "X" + (n - j > 1 ? "^" + (n - j) : "") + "Y" + (j-1 > 1 ? "^" + (j-1) : ""));
            }
        }
    }
    Console.WriteLine();
}

public static int[,] GetIndex(int n)
{
    n = n + 2;
    int[,] arr = new int[n, n];
    for (int i = 2; i < n; i++)
    {
        int j = i;
        for (int k = 1; k <= j; k++)
        {
            if (k == 1)
            {
                arr[j, k] = 1;
            }
            else if (k == j)
            {
                arr[j, k] = 1;
            }
            else
            {
                arr[j, k] = arr[j - 1, k - 1] + arr[j - 1, k];
            }
        }
    }
    return arr;
}
artwl | 园豆:16736 (专家六级) | 2012-06-01 18:07

artwl感谢代劳了。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-06-07 08:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册