首页 > 代码库 > USTC OJ — 1011 Problem of Deck(组合数学,递推关系)

USTC OJ — 1011 Problem of Deck(组合数学,递推关系)

1. 题目描述

根据题意,我们可以知道:

在桌子边上放一个尺子(长度为L),为了保持其不掉落,伸出桌面边缘最大长度为1/2L。

在上面的基础上,再累加一个尺子,为了保持其不掉落,伸出下面尺子的边缘最大长度为1/4L。

在累加一个尺子,为了保持其不掉落,伸出下面尺子的边缘最大长度为1/6L。

依次下去。。。

2. 算法设计

由上面的描述,我们可以得到递推关系

累加了n把尺子时,延伸出桌子边缘的长度为

length(0) = 0

length(n) = length(n-1) + 1/(2n) , n ≥ 1.

3. AC Code

 1 #include <stdio.h> 2 #define N 100000 3 double table[N]; // table[i] i张cards的时候,extend的长度 4  5 void print(int n); 6  7 int main() 8 { 9     int i, n;    10     // take table11     table[0] = 0;12     for ( i = 1; i < N; i++ )13     {14         table[i] = table[i-1] + 1.0 / (2*i);15     }16 17     printf("# Cards  Overhang\n");18     while ( EOF != scanf("%d", &n) )19     {20         print(n);21     }22 }23 24 void print(int n)25 {26     printf("%5d     %.3lf\n", n, table[n]);27 }
View Code

 

USTC OJ — 1011 Problem of Deck(组合数学,递推关系)