Cantor的数表

题目描述

如下数列,前5项分别是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

思路:

通过斜线对数据进行分类

#include <stdio.h>
int main(void)
{
    int i = 0;int j = 0;int count = 0;int k = 0;
    int left;int right;
    int flag = 0;
    scanf("%d",&count);
    while(1)
    {
        k++;
        if((k%2) == 0)
        {
            for(right = k,left = 1; right >= 1; right--,left++)
            {
                i++;
                printf("count:%d:%d/%d\n",i,left,right);
                if(i == count)
                {
                    flag = 1;
                    break;
                }
            }

        }else{
            for(left = k,right = 1; left >= 1; left--,right++)
            {
                i++;
                printf("count:%d:%d/%d\n",i,left,right);
                if(i == count)
                {
                    flag = 1;
                    break;
                }
            }

        }
        if(flag > 0)
            break;
    }
    printf("%d/%d\n",left,right);
    return 0;
}
时间: 2024-11-08 10:28:42

Cantor的数表的相关文章

Cantor的数表 【找规律】

小俞同学,最近勤学苦练数学,对一种数表产生了兴趣. 数表如下: 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 她冥思苦相了好久,貌似摸到了一点规律,但是她不知道自己的规律找的对不对,所以需要你来写一个程序来判断. 输入格式 每行一个n(1<=n<232). 输出 对于输入的n,输出第n项. 第一项:1/1 第二项:1/2 第三项:  2/1 第四项:3/1 第五项:2/2. 样例输入 3 14 7 12345 样例输出

算法篇——Cantor的数表

来源:<算法竞赛入门经典>例题5.4.1 题目:现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 第一项是1/1,第二项是是1/2,第三项是2/1,第四项是3/1,第五项是2/2,…….输入n,输出第n项. 样例输入: 3 14 7 12345 样例输出: 2/1 2/4 1/4 59/99 分析: 数表提示我们按照斜线分类.第1条斜线有1个数,第2条有2个数,第3条有3个数……第k条有k个数.这样,前k条斜线一共有S=1+2+3+…

UVA - 264 - Count on Cantor (Cantor的数表!)

UVA - 264 Count on Cantor Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description  Count on Cantor  One of the famous proofs of modern mathematics is Georg Cantor's demonstration that the set of rational nu

Cantor 的数表

#include <stdio.h> #include <math.h> int main() { int n; while(scanf("%d",&n)==1) { int k =(int)floor((sqrt(8.0*n+1)-1)/2-1e-9)+1; int s = k*(k+1)/2; printf("%d/%d\n",s-n+1,k-s+n); } }

《入门经典》——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 分析:这是一道典型的寻找数表规律然后编码

寒假练习 05

刷完了数学专题,感觉思维量有些大,同时也对浮点数的运算有些接触.最重要的还是感觉有时候题目读起来有些吃力,需要借助中文翻译. UVaOJ 113 这道题目是集训的时候第一天晚上的题目,据说可以double解决,当时没有AC. 现在重新做了一遍,需要注意的是最后输出的结果一定要转换成int,否则会WA. 同时,double转换为int的时候可以采取这样的方式:(int)floor(x + 0.5). #include <iostream> #include <math.h> usin

C语言程序设计100例之(3): Cantor表

例3    Cantor表 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1  1/2  1/3  1/4  …… 2/1  2/2  2/3  …… 3/1  3/2  …… 4/1  …… …… 现以z字型方法给上表的每项编号.方法为:第一项是1/1,然后是1/2.2/1.3/1.2/2.1/3.1/4.2/3……. 输入格式 整数N(1≤N≤10000000) 输出格式 表中的第N项 输入样例 7 输出样例 1/

cantor三分集

值得一提的是,第一次听说cantor三分集是在数字电路课上,然而数电是我最不喜欢的课程之一...... 分形大都具有自相似.自仿射性质,所以cantor三分集用递归再合适不过了,本来不想用matlab的,毕竟以后不会靠这东西.但是考虑到其方便的绘图功能还是用了.matlab写递归还是头一遭,心慌慌,不过试了一下发现和其他语言基本没差别! 源码 function cantor(Ax, Ay, Bx, By) precision = 0.001; if Bx-Ax < precision plot(

单继承与多继承中的虚函数表和虚函数指针

首先,我们了解一下何为单继承,何为多继承?? 单继承:一个子类只有一个直接父类. 多继承:一个子类有两个或多个直接父类. 单继承中的虚函数表分析: 示例程序: #include <iostream> using namespace std; typedef void(*FUNC)(); class Base { public: virtual void func1() { cout << "Base::func1()" << endl; } virt