您当前的位置: 首页 >  Java

梁同学与Android

暂无认证

  • 4浏览

    0关注

    618博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java 洛谷 P1014 Cantor表

梁同学与Android 发布时间:2020-02-19 15:23:29 ,浏览量:4

在这里插入图片描述 今天跟我的小伙伴一起研究出了这道题

题目链接:https://www.luogu.com.cn/problem/P1014 题目理解:

首先我们来理解一下题目中说的以Z字形给上表的每一项编号是怎么个编法

我们看一张图(图片来自网络)

在这里插入图片描述 大家可以看正方形里面的数字就知道方向是怎么走的了,实在还是不懂请看下图

在这里插入图片描述

代码实例:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
    	int ans = 1;//计算的是第几项
    	int i = 1;//i代表的是分子也就是行数
    	int j = 1;//j代表的是分母也就是列数
    	int temp = 1;//1代表遍历的方向是向上的,0代表遍历的方向是向下的
    	int n = scanner.nextInt();
    	
    	while(n!=ans) {//如果你没有判断到最后一项的话就继续判断,一个一个枚举的判断
    		if(temp==1) {//如果方向向上
    			if(i==1) {//判断是否到了上边缘
    				j++;//分母加1,像右边前进一格
    				temp=0;//改变方向
    				ans++;//判断下一项
    				continue;//方向改变了就要退出当前循环,进行下一次的判断
    			}else {//没有到上边缘
    				i--;//分子减1
    				j++;//分母加1
    			}
    		}else {
    			if(j==1) {//判断是否到了左边缘
    				i++;//分子加1,像下走一格
    				temp=1;//改变方向
    				ans++;//判断下一项
    				continue;//方向改变了就要退出当前循环,进行下一次的判断
    			}else {//没有到左边缘
    				i++;//分子加1
    				j--;//分母减1
    			}
    		}
    		ans++;//没有抵达边缘的判断结束后,都要加1
    	}
    	System.out.println(i+"/"+j);
    	scanner.close();
    }
}
关注
打赏
1660730345
查看更多评论
立即登录/注册

微信扫码登录

0.1025s