咖啡


私信TA

用户名:Tianxn

访问量:129149

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 9
经  验 26192
参赛次数 10
文章发表 197
年  龄 22
在职情况 学生
学  校 西安电子科技大学
专  业 软件工程

  自我简介:

解题思路:

初看这张表,不难发现:每个分子的分子是行号,分母是列号。但是根据题目的提示,第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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区