(解题报告)POJ1969--Count on Canton(利用蛇形矩阵知识)

Count on Canton
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu
Submit

Status
Description
One of the famous proofs of modern mathematics is Georg Cantor’s demonstration that the set of rational numbers is enumerable. The proof works by using an explicit enumeration of rational numbers as shown in the diagram below.

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

In the above diagram, the first term is 1/1, the second term is 1/2, the third term is 2/1, the fourth term is 3/1, the fifth term is 2/2, and so on.

Input
The input list contains a single number per line and will be terminated by endof-file.

Output
You are to write a program that will read a list of numbers in the range from 1 to 10^7 and will print for each number the corresponding term in Cantor’s enumeration as given below.

Sample Input
3
14
7

Sample Output
TERM 3 IS 2/1
TERM 14 IS 2/4
TERM 7 IS 1/4

解题思路:
根据蛇形矩阵(完全)
定下解题思路;

具体代码如下:(参照)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {
        int s=0,k=1;
        while(1)
        {
            s+=k;//统计个数,当前几斜线和大于了规定的序号,说明此时该数在第k根斜线
            if(s>=n)
            {//将分子和分母关系图分为两块,斜线分为两种,第奇数条
                if(k%2) printf("TERM %d IS %d/%d\n",n,s-n+1,k-s+n);//第奇数条
                else printf("TERM %d IS %d/%d\n",n,k-s+n,s-n+1);//第偶数条
                break;
            }
            k++;
        }
    }
    return 0;
}
/*对k-s+n和s-n+1理解:
对分子,奇数列是在递减,偶数列递增
对分母,奇数列在递增,偶数列在递减
图中逻辑关系是:奇数列分子递减,分母递增
偶数列,分子递增,分母递减,且n是递增的,s表示当前斜线中最大的一个数,第几根线就有第几个元素k,故
递减用s-n+1,递增用k-s+n*/ 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值