zoukankan      html  css  js  c++  java
  • 《入门经典》——6.15

      可以说数学是算法的基石,那么这里便通过介绍几道数学题目来窥探一下数学思维如何和编程有机的结合起来。

      Cantor的数表:有下列数,第一项是1/1,第二项是1/2第三项是2/1,第四项是3/1,第五项2/2,….。输入n,输出第n项。

      1/1  1/2  1/3  1/4  1/5

      2/1  2/2  2/3  2/4

      3/1  3/2  3/3 

      4/1  4/2

      5/1

      样例输入:

      3

      14

      7

      12345

      样例输出:

      2/1

      2/4

      1/4

      59/99

      分析:这是一道典型的寻找数表规律然后编码实现的题目,他考察一定的数学归纳能力。

      这里通过题设的提示,我们不难看到这个数表沿着斜线走“s”型路线,而对于每条斜线,我们能够看到分析分母的和是一致的。

      对于输入的n,我们首先计算它前面有多少条完整斜线,记为k:

                                                                                   

    那么判断第n项所在斜线的序号k+1的奇偶性,这决定了分子分母的递增方向。

    如果k+1是偶数,那么分母从左下方往右上方递增,分子分母的和为k+2。

    简易的参考代码如下。

    #include<cstdio>
    
    #include<cmath>
    
    using namespace std;
    
     
    
    int main()
    
    {
    
        int n , k;
    
     
    
        while(scanf("%d",&n) != EOF)
    
        {
    
            k = (int)floor((sqrt(8.0*n+1)-1)/2-1e-9); //floor向下取整函数
    
     
    
            int temp = ((1 + k)*k)/2;
    
            printf("k = %d temp = %d
    ",k , temp);
    
            if((k + 1) % 2 == 0)
    
                 printf("%d/%d
    ",n-temp,k + 2 - n + temp);
    
            else
    
                 printf("%d/%d
    ",k + 2 - n + temp,n - temp);
    
        }
    
    }          

                                                          

  • 相关阅读:
    linux查看tomcat下记录
    jstatd error
    你不来,我不敢老去
    解决forward后资源加载失败的问题
    SSL安装 tomcat jks AVR
    浅谈Class Activation Mapping(CAM)
    oracle大牛博客
    Oracle函数translate()的用法
    oralce函数nullif使用
    总结优化索引的规则
  • 原文地址:https://www.cnblogs.com/rhythmic/p/5615795.html
Copyright © 2011-2022 走看看