zoukankan      html  css  js  c++  java
  • 南阳理工oj 题目85 有趣的数 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<=100000),输出表中第N项。

    输入
    第一行有一个整数m(0<m<=10),表示有m组测试数据;
    随后有m行,每行有一个整数N;
    输出
    输出表中第N项
    样例输入
    4
    3
    14
    7
    12345
    样例输出
    2/1
    2/4
    1/4
    59/99
    题解:
    1/1 1/2 1/3 1/4 1/5 1/6…..
    2/1 2/2 2/3 2/4 2/5….
    3/1 3/2 3/3 3/4 ….
    4/1 4/2 4/3…..
    5/1 5/2………
    6/1…….
    这道题是 根据所给的N,在如图所示的排列中找到第N个数,关键在于读数的方法,或者说顺序.
    题中的数应按照Z型去读.读的顺序入图.
    这里写图片描述
    按照如图斜线去读。第1条斜线有1个数,第2条有2个数,第3条有3个数……第k条有k个数。这样,前k条斜线一共有S=1+2+3+……+k个数。

    这样你会发现行数k的奇偶性会影响分子分母的谁大谁小.
    若k是奇数,第k条斜线上倒数第i个元素是i/(k+1-i);
    若k是偶数,第k条斜线上倒数第i个元素是(k+1-i)/i。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
        int n,m,k,l;
        scanf("%d",&l);
        while(l--)
        {
            scanf("%d",&k);
            n=0;m=0;
            while(n<k)
            {
                m+=1;
                n+=m;
            }
            if(m%2==0)
                printf("%d/%d
    ",m+k-n,n-k+1);
            else
                printf("%d/%d
    ",n-k+1,m+k-n);
        }
        return 0;
    }
    
  • 相关阅读:
    realsense d435i qt 测试
    realsense d435i 数据 测试
    realsense d435i测试
    ubuntu torch GPU yolov5
    IfcLayeredItem
    ubuntu大服务器 pytorch环境配置
    condarc内容
    realsense point cloud
    yolov5 环境配置
    pip error
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900158.html
Copyright © 2011-2022 走看看