解题思路:
初看这张表,不难发现:每个分子的分子是行号,分母是列号。但是根据题目的提示,第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语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:489 |
钟神赛车 (C语言代码)浏览:911 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:942 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:636 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:897 |
C语言训练-亲密数 (C语言代码)浏览:697 |
Minesweeper (C语言描述,蓝桥杯)浏览:1176 |
C语言训练-自守数问题 (C语言代码)浏览:798 |
【计算球体积】 (C语言代码)浏览:1619 |
剔除相关数 (C语言代码)浏览:1156 |