解题思路:
初看这张表,不难发现:每个分子的分子是行号,分母是列号。但是根据题目的提示,第1项是1/1,然后是1/2,2/1,3/1,2/2,……,这就引导我们按照斜线的方向,而不是行和列的方向来研究这个问题,如图:
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 ……
每条斜线上的分式,其分子分母之和是一样的。第一条和为2,第二天和为3,……,第i条斜线上的分子分母之和为i+1。并且每条斜线上的分式的个数是这条斜线的序列(从1开始),即第i条斜线上有i个分式。
由图,奇数号的斜线斜向上,偶数号的斜线向下。于是,对于第i条斜线的序列,如果序号奇数,分子从左下到右上分母依次为1到i,第i条斜线上的第j项是(i+1-j)/j;如果序号是偶数,分式从右上到左下分子依次为1到i,第i条斜线上的第j项是j/(i+1-j)。
综上,要查找第n项,首项要确定它在第几条斜线上,然后确定斜线的方向,才能根据规律,计算出该分式。
注意事项:
参考代码:
#include <cstdio> #include <cstdlib> #include <iostream> #include <cmath> #include <cctype> #include <cstring> #include <string> #include <stack> #include <algorithm> #include <functional> using namespace std; int main() { int n, i, j; while(scanf("%d", &n) != EOF) { i = 0; while(n>0) { n -= ++i; } j = n+i; //修正 if(i&1) //同i%2==1 { printf("%d/%d\n", i+1-j, j);//第n项在奇数号斜线上 } else { printf("%d/%d\n", j, i+1-j);//第n项在偶数号斜线上 } } return 0; }
0.0分
6 人评分