• 洛谷 P1014 Cantor表【蛇皮矩阵/找规律/模拟】


    题目描述

    现代数学的著名证明之一是Georg 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 …

    … 我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…

    输入输出格式

    输入格式:

    整数N(1≤N≤10000000)

    输出格式:

    表中的第N项

    输入输出样例

    输入样例#1: 复制
    7
    
    输出样例#1: 复制
    1/4

    【分析】:

    移动方向有四种:

    1.向右移动。

    2.向下移动。

    3.向左下方移动。

    4.向右上方移动。

    那么此题可采用模拟的方法。

    在每个转折点找一找规律,可以发现

    • 当分母为偶数分子为1时向下走

    • 当分子为奇数分母为1时向上走

    • 若分子分母某一个为1但另一个不符合以上情况时另一个就+1

    Z型的循环加几个if就好了,用两个变量做分子和分母

    【代码】:

    #include<bits/stdc++.h>
    using namespace std;
    #define eps 1e-6
    
    int main()
    {
        int n;
        cin>>n;
        int x = 1, y = 1;
        for(int i=1; i<n; i++)
        {
            if((y%2==1) && x==1)  y++; //上奇数边界
            else if((x%2)==0 && y==1) x++; //左偶数边界
            else if((x+y)%2==1) x++,y--; //奇数斜线
            else if((x+y)%2==0) x--,y++; //偶数斜线
        }
        cout<<x<<"/"<<y<<endl;;
        return 0;
    }
    模拟

    【总结】:和HDU幻方找规律、蛇皮矩阵有点像,S走位很强,就是分开看分子分母坐标怎么变。

  • 相关阅读:
    OA并发用户数(转)
    mysql中limit用法[转]
    解决IE浏览器中AJAX只能运行一次的IE缓存问题
    ASP.NET AJAX 1.0 beta 发布了...
    开始我的第一个WPF程序
    前WPF PM 用WPF写的一个XAML即时编辑器 kaxaml
    啊..要死了...
    const 和 static readonly
    DCDC Converter(六)同步整流管
    DCDC Converter(三)效率之计算(2):Discontinuous Mode
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8727007.html
Copyright © 2020-2023  润新知