cantor数表

http://wikioi.com/problem/1083/
过去也看过这道题,感觉是一道数学题,找规律。

#include<stdio.h>
int main(void){
    int n,i,j,k = 1,sum = 0;
    scanf("%d",&n);
    for(;sum < n;){
        sum+=k;
        if(sum>=n){
            break;
        }
        k++;
    }
    printf("%d/%d",sum-n+1,k-sum+n);
    return 0;
}

n <= S(k) => S(k)-n + 1 表示某一个在某一列倒数第i个。
按照规则取得的数字为i/k+1-i => (S(k) -n +1) / (k + 1 – S(k) +n -1) => (S(k) -n +1) / (k – S(k) + n)

不难。还有别的方法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据