java程序设计基础训练一(11-15)

11.

【问题描述】现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个地址串中没有空格出现(因为要表示成一个32数字)。>现在需要你用程序来判断IP是否合法。

【输入形式】输入一个ip地址

【输出形式】返回判断的结果YES or NO

【样例输入】

  10.138.15.1

【样例输出】

  YES

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String line=in.nextLine();
        String[] mbf=line.split("\\.");
        int mbflen=mbf.length;
        if(mbflen!=4){
            System.out.println("NO");
        }
        else{
            int flag=1;
            for(int i=0;i<4;i++){
                String a=mbf[i];
                int alen=a.length();
                if(alen>3||alen==0){
                    flag=0;
                    break;
                }
                else{
                    if (a.charAt(0) == '0'&&alen>=2) {
                        flag = 0;
                        break;
                    }
                    if(alen==3){
                        if(a.charAt(0)>='3'){
                            flag=0;
                            break;
                        }
                        else{
                            if(a.charAt(0)=='2'){
                                if(a.charAt(1)>='6'){
                                    flag=0;
                                    break;
                                }
                                else{
                                    if(a.charAt(1)=='5'){
                                        if(a.charAt(2)>=6){
                                            flag=0;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }//判断是否大于255
                    for (int j = 0; j < alen; j++) {
                        if (a.charAt(j) == ' ' || a.charAt(j) < '0' || a.charAt(j) > '9') {
                            flag = 0;
                            break;
                        }
                    }
                }
            }
            if(flag==0){
                System.out.println("NO");
            }
            else{
                System.out.println("YES");
            }
        }

    }
}

12.

【问题描述】

给出年分m和一年中的第n天,算出第n天是几月几号。

【输入形式】

输入包括两个整数y,n

【输出形式】

可能有多组测试数据,对于每组数据,按yyyy-mm-dd的格式将输入中对应的日期打印出来。


【样例输入】

2000 3

2000 31

2000 40

2000 60


【样例输出】

2000-01-03

2000-01-31

2000-02-09

2000-02-29

import java.util.Scanner;
public class Main {
    public static int judge(int a){
        int ans;
        if(a%400==0){
            ans=366;
        }
        else if(a%100==0){
            ans=365;
        }
        else if(a%4==0){
            ans=366;
        }
        else{
            ans=365;
        };
        return ans;
    };

    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNextLine()){
            int y=in.nextInt();
            int n=in.nextInt();
            in.nextLine();
            int m,d;
            int[] arr1={31,29,31,30,31,30,31,31,30,31,30,31};
            int[] arr2={31,28,31,30,31,30,31,31,30,31,30,31};
            if(judge(y)==366){
                int j=0;
                while(n-arr1[j]>0){
                    n=n-arr1[j];
                    j++;
                }
                m=j+1;
                d=n;
                System.out.printf("%d-%02d-%02d",y,m,d);
            }
            else{
                int j=0;
                while(n-arr2[j]>0){
                    n=n-arr2[j];
                    j++;
                }
                m=j+1;
                d=n;
                System.out.printf("%d-%02d-%02d",y,m,d);
                System.out.println();
            }
        }

    }
}

13.

【问题描述】明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。Input Param n 输入随机数的个数 inputArray n 个随机整数组成的数组 Return Value OutputArray 输出处理后的随机整数

【输入形式】输入多行,先输入随机整数的个数n,再输入相应个数的整数

【输出形式】输出一行,处理后的结果

【样例输入】 11 

             10 20 40 32 67 40 20 89 300 400 15 

【样例输出】10 15 20 32 40 67 89 300 400 

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        in.nextLine();
        int[] arr1=new int[n];
        for(int i=0;i<n;i++){
            arr1[i]=in.nextInt();
        };
        Arrays.sort(arr1);
        System.out.print(arr1[0]+" ");
        for(int i=1;i<n;i++){
            if(arr1[i]!=arr1[i-1]){
                System.out.print(arr1[i]+" ");
            }
        }
    }
}

14.

【问题描述】给一个非负整数数组。假设你最初的位置为0,数组中每一个元素的值代表你能跳跃最大的长度,判断是否能达到数组的最后一个位置

【输入形式】第一行数组长度

            第二行输入一个非负整数数组

【输出形式】布尔类型的值

【样例输入】

   5 

 1 2 3 1 4

【样例输出】

    true 

import java.util.Scanner;
public class Main {
    public static boolean judge(int[] arr){
        int d=0;
        int len=arr.length;
        for(int i=0;i<len;i++){
            if(i<=d){
                d=Math.max(d,i+arr[i]);
                if(d>=len-1){
                    return true;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n= in.nextInt();
        in.nextLine();
        int[] arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=in.nextInt();
        }
        if(judge(arr)){
            System.out.print("true");
        }
        else{
            System.out.print("false");
        };

    }
}

15.

【问题描述】输入n个整数,输出其中最小的k个。

【输入形式】输入说明 1输入两个整数(n k) 2输入一个整数数组

【输出形式】输出一个整数数组

【样例输入】

   5 2 

 1 3 5 7 2 

【样例输出】

 1 2

import java.util.Scanner;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int k=in.nextInt();
        in.nextLine();
        int[] arr1=new int[n];
        for(int i=0;i<n;i++){
            arr1[i]=in.nextInt();
        }
        Arrays.sort(arr1);
        for(int i=0;i<k;i++){
            System.out.print(arr1[i]+" ");
        }

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值