南阳oj_(65)另一种阶乘问题

大家都知道阶乘这个概念,举个简单的例子:5!=12345.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=135.现在明白现在这种阶乘的意思了吧!

另一种阶乘问题

时间限制:3000 ms | 内存限制:65535 KB

难度:1

描述

大家都知道阶乘这个概念,举个简单的例子:5!=12345.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=135.现在明白现在这种阶乘的意思了吧!

现在你的任务是求出1!!+2!!……+n!!的正确值(n<=20)

输入

第一行输入一个a(a<=20),代表共有a组测试数据
接下来a行各行输入一个n.

输出

各行输出结果一个整数R表示1!!+2!!……+n!!的正确值

样例输入

1
2
3
2
3
5

样例输出

1
2
5
23

我用的编译器是CodeBlocks

我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<cstdio>  
#include<iostream>
using namespace std;
int main()
{

int a;
cin>>a;
while(a--)
{
int n;
cin>>n;
int sum=0;
for(int i=1;i<=n;i++)
{
int m=1;
for (int x=1;x<=i;x+=2)
{
m=m*x;
}
sum=sum+m;
}
cout<<n<<"的另一种阶乘是"<<sum<<endl;
}
}

最优代码:

1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>  
using namespace std;
int main()
{

int n,m,r[]={0,1,2,5,8,23,38,143,248,1193,2138,12533,22928,158063,293198,2320223,4347248,38806673,73266098,727995173,1382724248};
cin>>n;
while(n--)
{
cin>>m;
cout<<r[m]<<endl;
}
}


O(∩_∩)O