解题思路:
初看这张表,不难发现:每个分子的分子是行号,分母是列号。但是根据题目的提示,第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分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复