关闭

有趣的数

628人阅读 评论(0) 收藏 举报
 

有趣的数

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述

把分数按下面的办法排成一个数表。

1/1 1/2 1/3 1/4.....

2/1 2/2 2/3....

3/1 3/2 ....

4/1.....
.........

我们以z字型方法给上表的每项编号。特定方法:第一项是1/1,然后是1/2、2/1、3/1、2/2、1/3、1/4、2/3……。编程输入项号N(1<=N<=100000),输出表中第N项。

输入
第一行有一个整数m(0<m<=10),表示有m组测试数据;
随后有m行,每行有一个整数N;
输出
输出表中第N项
样例输入
4
3
14
7
12345
样例输出
2/1
2/4
1/4
59/99
代码:
#include<stdio.h>
int f(int n)
{
	if(n==1)
	return 1;
	else
	return f(n-1)+n ; 
}

int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		int m;
		scanf("%d",&m);
		int c=0;
		int b=0;
		for(int i=1;;i++)
			if(f(i)>=m)
			{
				c=f(i)-m;
				b=i;
				break;
			}
		if(b%2!=0)
			printf("%d/%d\n",c+1,b-c);
		else
			printf("%d/%d\n",b-c,c+1);
	}
}

总结:

自己把它想复杂了,或者是自己一开始根本就束手无策没弄明白思路。

可以把这个图形右转45度,成一金字塔形状,每一行的分母和分子都与上一行有关系,并且每行的最大编号实际上就是前面所有分母的和。

当分母为奇数时,编号从左往右进行,当分母为偶数时,编号从右往左进行。

然后就OK了。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:145400次
    • 积分:1937
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:26篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论