java 51nod

博客内容涉及多个Java基础编程题目,包括骑车与走路、分拣、判断闰年、被3,5,7整除、输出绝对值、等差数列的末项、A+B问题以及条件输出。博主在解决过程中遇到数据类型转换问题,导致时间复杂度过高,通过学习和优化解决了问题。" 53200241,1512681,程序设计初步解析,"['编程基础', '初学者指南', '程序设计入门', '例题解析']
摘要由CSDN通过智能技术生成

1.3275 骑车与走路

2.3388 分拣

3.3277 判断闰年

4.3273 被3,5,7整除

5.3271 输出绝对值

6.3268 等差数列的末项

7.3415 A+B V2

8.3429 条件输出5

3275 骑车与走路

public class 骑车与走路_3275{
   
    public static void main(String[] args){
   
        panduan();
    }

    public static void panduan(){
   
        //首先是输入的问题
        java.util.Scanner s=new java.util.Scanner(System.in);
        int a=s.nextInt();

        if((50+a/3.0)>a/1.2){
   
            System.out.println("Walk");
        }else if((50+a/3.0)<a/1.2){
   
            System.out.println("Bike");
        }else if((50+a/3.0)==a/1.2){
   
            System.out.println("All");
        }
    }
}

3388 分拣
这次真的是给我写吐了,我不断的将我的代码改进,始终不能通过,最后参考了一下这位大神的代码发现我的问题,不是自身的代码,而是数据转换过多.就是说我最开是接收的数据为String类型,无法强转类型转换为int类型,所以就查了一些方法采用Integer.parseInt(String)将类型进行转换,而每个循环都这样,相当于每一次都执行了一个----方法----,导致时间复杂度过高.下次注意

package java题库.nod51;

/*
    工厂里有一些分拣物件的工作,其中一名工人的工作是将面前传送带上依次送来的n个物件按照物件上的标号
    分别放到向左、向右两条传送带上,奇数的向左,偶数的向右。直到这一批物件分拣完,组长检查无误后打包装箱。
    身为组长的小明自知责任重大,每次工人分拣完后他都会立即停下传送带,从工人左侧传送带的最左端开始核查物件的标号,直到
    查到工人右侧传送带上最右端,以确认是否分拣正确。已知物件传送过来的顺序,小明希望你帮忙记录一个关于物件标号的数字序列,
    表示他应当核查到物件的顺序,以便迅速完成工作。

    输入:第一行输入一个数n,表示物件总数;第二行输入n个数,表示依次送来的n个物件上的标号。
    输出:输出一行n个数,表示小明应核查到的正确的物件顺序,以空格隔开。
    数据范围:对于100%的数据,1≤n≤100000,0≤物件标号≤10^9;
    输入样例
    6
    1 2 3 4 5 6
    输出样例
    1 3 5 6 4 2
*/

//如果是python应该怎么做,让他输入得到一个列表,遇到奇数的输出,遇到偶数的入栈(就是个列表)
//等到把列表全部循环一遍,开始出栈

import java.util.*;
public class 分拣_3388{
   
    public static void main(String[] args){
   
        看了人家的代码做的修改();
    }
    public static void fenjian(){
   

        //吐了提交运行超时,不过也该,写了两边循环

        //用来接收输入
        Scanner s=new Scanner(System.in);
        //接收输入的n
        System.out.print("请输入n");
        int n=s.nextInt();


        //接收输入的字符串,他们中间以空格隔开
        System.out.print("请输入这n个数");
        Scanner d=new Scanner(System.in);
        String str=d.nextLine();

        //使用split,以空格作为分割符,获得字符串数组
        String[] strs=str.split(" ");

        //这里采用第三种方法建立int类型数组(声明数组时指定元素个数然后赋值)
        int[] nums=new int[n];

        //开始for循环将变量放入数组中

            //这个变量是用来记录偶数个数
        int ou=0;
        for(int a=0;a<n;a++){
   
            //我想到了一个方法,记录偶数的个数
            //在这个过程中将偶数放到一个新的数组中(但是你不知道这个数组的长度)
            //但是一定小于n,所以你可以先放进去,之后再一个循环给他拿出来
            //说实话挺蠢的,等我java学的好一点,一定要搞一个动态的和python的list
            //一样的东西
            int b=Integer.parseInt(strs[a]);
            if(b%2!=0){
   //奇数输出
                System.out.printf("%d ",b);
            }else{
   
                nums[ou]=b;
                ou+=1;
            }
        }
        //再来个循环把偶数全部输出
        for(int a=ou-1;a>=0;a--){
   
            System.out.printf("%d ",nums[a]);
        }

    }


    //我突然想到了一个好办法,一个从左往右跑输出奇数,一个从右往左跑输出偶数,一个循环就能把奇数偶数全部输出
    //因为奇数一定要先输出完
    //所以拿一个字符串变量,将他们拼接到一起
    public static void fen_String(){
   

        //运行还是超时,这个的时间复杂度应该是o(n)
        //细算的话是o(2n),当然其实你只需要走路程的一半,这样所有的数其实都已经走过了
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值