有趣的数
程序员文章站
2022-04-19 15:37:14
...
描述
把分数按下面的办法排成一个数表。
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
纯粹的找规律
首先,称从右上到左下的斜线称为副对角线
每一条副对角线上分子分母相加之和的增加有一个规律
每增加一条副对角线,数表中数的个数的增加有规律
而对于是第几条副对角线,根据n奇偶数的不同又有不同规律
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<set>
#include<algorithm>//sort
#include<string>
#include<string.h>
#include <memory.h>
using namespace std;
int main()
{
int b;
scanf("%d",&b);
while(b--)//b-- != EOF scanf("%d",&n)+1 gets(n)
{
int N,i,m,fz,fm;
cin>>N;
for(i=1;;i++)
{
if((i*i+i)/2>=N)
{
break;
}
}
if(i%2!=0)
{
m=(i*i+i)/2;
fz=m+1-N;//分子
fm=i+1-fz;//分母
}
else
{
m=((i-1)*(i-1)+(i-1))/2;
fz=N-m;
fm=i+1-fz;
}
printf("%d/%d",fz,fm);
printf("\n");//恭喜发财!
}
return 0;
}
上一篇: Vue里调用百度地图步骤详解
下一篇: 有趣的编程