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走位很强,就是分开看分子分母坐标怎么变。

  • 相关阅读:
    本周总结
    本周总结:用户故事和用户场景
    排球比赛规则说明书
    我与计算机
    官网地址备份
    连续自然数序列,求取中位数方案
    Spark 实现自定义对象sequenceFile方式存储,读写示例(scala编写)
    hbase 异常
    python_初步
    redis_入门网址
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8727007.html
Copyright © 2011-2022 走看看