codeVS 1083 cantor表(1999年NOIP全國聯賽普及組)__codeVS

來源:互聯網
上載者:User

時間限制:1s 空間限制:128000KB  題目等級:白銀silver


題目描述 Description

現代數學的著名證明之一是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,…


輸入描述 Input Description

  整數N(1≤N≤10000000)


範例輸出 Sample Output   1/4
類比思想:沿圖示軌跡斜著看,左上方部分,前 i 個斜行有1+2+...+i 項(即i*(i+1)/2),以此判斷第n項在第幾斜行。再根據奇數斜行從左下到右上、偶數斜行從右上到左下,判斷出第n項在該斜行的什麼位置,然後就可以推斷出第n項的數值。

#include <iostream>#include <math.h>using namespace std;int main(){    int n;    cin>>n;    /*找出第n項所在的“斜行”*/    int i=0;    while( 1 )    {        i++;        if( i*(i+1)>=2*n )            break;    }    /* 1.第n項恰好是第i斜行的端點 */    if( i*(i+1)==2*n )    {        if( i%2==1 )        {            cout<<"1/"<<i<<endl;            return 0;        }        else        {            cout<<i<<"/1"<<endl;            return 0;        }    }    /* 2.第n項在第i斜行的內部 */    else    {        int d=i*(i+1)/2-n;              //d是n與斜行端點的差值(可理解為“第n項離斜行末的距離”)        if( i%2==1 )        {            cout<<1+d<<"/"<<i-d<<endl;  //奇數斜行分母從1加到i,分子從i減到1        }        else        {            cout<<i-d<<"/"<<1+d<<endl;  //偶數斜行分子從1加到i,分母從i減到1        }    }    return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.