(解题报告)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*/ 

你可能感兴趣的:((解题报告)POJ1969--Count on Canton(利用蛇形矩阵知识))