不少刚入门的小伙伴被上述题中的z字形困扰,但是通过分析题目给出的编号顺序,不难看出其实我们可以把它看作一个向左倾斜45°的金字塔。
如图所示:
看到这儿大家是否有了一些自己的理解;
如果你已经有了思路不先自己动手尝试一下;
ps:养成好习惯嘛!
接下来解释为什么是Z字形:
上述左图我们把表分为一层一层的“小汉堡儿”,根据题干给的少量编号顺序,将上述“小汉堡”补全。
于是得到:
不难发现>
当行数为奇数时,这一行的编号从左端开始;
当行数为偶数时,这一行的编号从右端开始;
所以这道题就变成了如何找到所求项在哪一行;
剩下的就是找每一行的规律;
废话不多说,直接上代码:
C:
#include<stdio.h>
int main()
{
int m;
int before;//第n层之前所有项;
int n;//层数;
int f=0;//判断层数所用函数;
scanf("%d",&m);//输入第几项;
for(n=1;f<m;n++)
{
f+=n;
}
before=f-n+1;
if( n % 2 !=1 )
{
printf("%d/%d",n-(m-before),(m-before));
}
else
{
printf("%d/%d",(m-before),n-(m-before));
}
return 0;
}
Java:
import java.util.Scanner;
public class Hellojava
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int m = sc.nextInt();
int before,n,f=0;
for(n=1;f < m;n++)
{
f+=n;
}
before=f-n+1;
if ( n % 2 ==1 )
{
System.out.println((m-before)+"/"+(n-(m-before)));
}
else
{
System.out.println(n-(m-before)+"/"+(m-before));
}
}
}