zoukankan      html  css  js  c++  java
  • 洛谷 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走位很强,就是分开看分子分母坐标怎么变。

  • 相关阅读:
    GDB命令行最基本操作
    mysql待整理
    python生成二维数组
    python2.7执行shell命令
    使用matplot做图--sin图像
    python--Numpy简单实用实例
    python多线程的使用
    pyv8使用总结
    QDialog:输入对话框、颜色对话框、字体对话框、文件对话框
    pyqt重写键盘事件+获取信号发送对象
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8727007.html
Copyright © 2011-2022 走看看