P1014 [NOIP1999 普及组] Cantor 表

 首先把数列写成这样:

 然后大家记住两条公式:

1.第N行有N个数,当前行元素的分子加分母= n+1

2.偶数行 分子递增分母递减

   奇数行 分子递减分母递增

然后记住求三个关键数字:1. n在第几行?(对应 i)   2.n在当前行的第几个元素 (对应 k)3. 前n- 1行共有几个数字(对应 sum)

xdm我举一个简单的例子,大家伙都能懂的!

此时N等于7,先让 j = 1 + 2 + 3 +4,当 j加到4时,while循环也就停止了,这是的 i 就是行数 ,然后用 j - i 就是前n - 1行共有几个数字,最后 n - sum就是 k。

第一次看可能有些懵,自己再举个例子代一代就明白了。

最后一步:先分出奇偶,先那偶数行举例:分子从1开始递增(代码里面k就是分子),然后分母比较麻烦 这里用到(当前行元素的分子加分母= n+1)用n + i - k 就得到了分母。

public class p1014 {
	public static void main(String[] args) {
  		Scanner scanner =new Scanner(System.in);
		int n =scanner.nextInt();
		int i = 0 , j = 0, sum = 0 , k;//sum 是前n-1个数。i是行数 
		
        while(j < n) {
			i++;
 		j += i;	
		}	

		sum = j - i;
		k = n - sum;


		//判断奇偶行
		if(i % 2 ==0) {
			System.out.println(k + "/" + (i+1-k));
		}
		if(i % 2 !=0) {
			System.out.println((i+1-k) + "/" + k);
		}
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值