原题目:洛谷P1028
目录
初步分析
不妨定义一个函数和一个计数变量sum。
这个函数通过递归来进行可能性的计数。具体的数字是多少,并不考虑。
int sum=0;//计数
void p(int n)
{
sum++;
for(int i=1;i<=n/2;i++)
p(i);
}
所以,总代码看起来就是这个样子的:
#include <iostream>
using namespace std;
int sum=0;
void p(int n)
{
sum++;
for(int i=1;i<=n/2;i++)
p(i);
}
int main()
{
int n;
cin>>n;
p(n);
cout<<sum;
}
提交!
事情,并没有那么简单... ...
25分。
What?!
满屏的TLE。心态爆炸。
于是准备打表。
#include <ostream>
这个是可以编辑文档的库(ostream)。
内部的freopen函数用来打开/新建文档。
freopen("data.out","w",stdout);
/*
函数解释:
新建/打开"data.out"文件,
模式"w"为写入模式("r"为只读模式),
stdout为输出流(stdin为输入流)
*/
所以打表代码看起来是这样的:
#include <iostream>
#include <ostream>
using namespace std;
int sum=0;
void p(int n)
{
sum++;
for(int i=1;i<=n/2;i++)
p(i);
}
int main()
{
freopen("data.out","w",stdout);
int n;
for(n=1;n<=1000;n++)
{
sum=0;//初始化计数变量
p(n);
cout<<sum<<",";
//这个cout是将内容输入到文件中;加逗号是为了打表完成后,定义数组时方便一些。
}
}
***警告***
本代码的运行时长大约为25分钟左右。
随着n的增大,计算时长会越来越长。
大概是这样:
***注***
如果打表完毕后,计算机系统询问.out文件以何方式打开,
建议选择记事本或其他文本编辑软件。
结果如图。数据量比较大。
搬运结果到新代码!
闭眼!全选!复制!(别忘了把最后多余的逗号删掉)
新建数组,定义初始值(大括号)。
就像这样。
(后略)。
再加上输入的代码块。直接输出data[输入的数字-1]。
没毛病(打表真好用。)!