入门经典5.4数学基础读书笔记①

开始慢慢感受到数学对oi的作用了,倒回去仔细看了看入门经典的数学基础那块,介于本人实在健忘在此写下读书笔记。


 

1.cantor的数表:

一道很常见的题,有两种解题方法:

<1>.前i条斜线一共有 s(k)=1+2+3+4+5+.....k 个数。

用一个简单的for循环到s>=n,分子就为k-s+n,显然分母加上分子的和是第k列+1,所以分子就为k+1-(k-s+n),整理之。//这里入门经典有错

(小提一下自己的证明思路,大概是:如n=7;则此时s=10;k=4;

本人理解的时候,看成是7=6+1,10=6+4,10-7<=>4-1,根据分子和分母的关系可知,这里求出来的就为分母,其他同上)

 

顺带附上代码:

入门经典5.4数学基础读书笔记①
 1 #include<cstdio>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,k,i,s;
 6     
 7     while(scanf("%d",&n)==1)
 8     {   
 9         k=1;s=0;
10         for(;;)
11         {
12           s+=k;
13           if (s>=n)
14           {
15               printf("%d/%d\n",k-s+n,s-n+1);//这里书有错,注意改正。若不信,可自己动手试试
16               break;
17           } 
18           k++; 
19         }
20     }
21     
22     return 0;
23 }
入门经典5.4数学基础读书笔记①

 

<2>.第二种数学味道会浓一些。

s(k)=1+2+3+4+5+....k=1/2k(k+1)

n<=s(k)<=1/2k(k+1)

<=> k2+k-2n

<=> 入门经典5.4数学基础读书笔记①

这样我们就可以不用for循环,直接把k预处理掉,输出结果就ok啦。。

但是要注意下浮点数要使动成整型。

入门经典5.4数学基础读书笔记①

上一篇:Shell统计报表表格生成


下一篇:转一个很牛的老板领导骂人的话