注册 登录
编程论坛 C++教室

将N种不同的数字填写到正五角星的顶角处,每种数字可以使用多次或者不使用。

zm12345 发布于 2016-05-23 22:57, 3788 次点击
萌妹子最近在玩一个填数字的游戏:将N种不同的数字填写到正五角星的顶角处,每种数字可以使用多次或者不使用。

一种填写方案经过旋转得到的不同方案算作一种。萌妹子想知道一共有多少种不同的填写方案,你可以帮她解决吗?



有多组测试用例,每组测试用例包含一个整数N,代表萌妹子有N种不同的数字(0<N<=2000)。



输出对于N种不同数字的填写方案数。


样例输入

1
2
3
123


样例输出

1
8
51
5630611467




4 回复
#2
rjsp2016-05-24 10:28
程序代码:
/*
只填1种数,每种都用到,有1种方案
只填2种数,每种都用到,有6种方案
只填3种数,每种都用到,有30种方案
只填4种数,每种都用到,有48种方案
只填5种数,每种都用到,有24种方案
所以,填N种数的方案 = N中取1的数量*1 + N中取2的数量*6 + N中取3的数量*30 + N中取4的数量*48 + N中取5的数量*24
例如
1: 1(1+0+0+0+0)
2: 8(2+6+0+0+0)
3: 51(3+18+30+0+0)
4: 208(4+36+120+48+0)
5: 629(5+60+300+240+24)
6: 1560(6+90+600+720+144)
7: 3367(7+126+1050+1680+504)
8: 6560(8+168+1680+3360+1344)
9: 11817(9+216+2520+6048+3024)
*/

#include <stdio.h>

int main( void )
{
    for( unsigned long long n; scanf("%llu",&n)==1 && n<=2000; )
        printf( "%llu\n", n + n*(n-1)*3 + n*(n-1)*(n-2)*5 + n*(n-1)*(n-2)*(n-3)*2 + n*(n-1)*(n-2)*(n-3)*(n-4)/5 );

    return 0;
}
#3
yangfrancis2016-05-24 11:01
原来是搞算法的题,差点想遍历了。
#4
zm123452016-05-24 18:48
回复 2楼 rjsp
“只填1种数,每种都用到,有1种方案
 只填2种数,每种都用到,有6种方案
 只填3种数,每种都用到,有30种方案
 只填4种数,每种都用到,有48种方案
 只填5种数,每种都用到,有24种方案”
这个是怎么算出来的?

#5
rjsp2016-05-24 23:02
以下是引用zm12345在2016-5-24 18:48:26的发言:

“只填1种数,每种都用到,有1种方案
 只填2种数,每种都用到,有6种方案
 只填3种数,每种都用到,有30种方案
 只填4种数,每种都用到,有48种方案
 只填5种数,每种都用到,有24种方案”
这个是怎么算出来的?

你嫌笔算麻烦,就写段代码跑呗
1