解题思路:
初看这张表,不难发现:每个分子的分子是行号,分母是列号。但是根据题目的提示,第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 人评分
化学品问题 (C语言代码)浏览:1330 |
C语言训练-谁家孩子跑最慢* (C语言代码)浏览:1507 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:538 |
【回文数(二)】 (C语言代码)浏览:851 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:468 |
字符串对比 (C语言代码)浏览:1398 |
淘淘的名单 (C语言代码)答案错误???浏览:593 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:505 |
WU-蓝桥杯算法提高VIP-勾股数 (C++代码)浏览:1592 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:904 |