参数解析,跳石板,计算日期到天数转换,幸运的袋子
发布日期:2021-05-14 17:06:03 浏览次数:17 分类:精选文章

本文共 3453 字,大约阅读时间需要 11 分钟。

题目:参数解析

题目描述

在命令行输入如下命令: xcopy /s c:\ d:\, 各个参数如下:

参数1:命令字xcopy
参数2:字符串/s
参数3:字符串c:
参数4: 字符串d:
请编写一个参数解析程序,实现将命令行各个参数解析出来。

解析规则:

1.参数分隔符为空格

2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” "d:“时,参数仍然是4个,第3个参数应该是字符串C:\program
files,而不是C:\program,注意输出参数时,需要将”"去掉,引号不存在嵌套情况。
3.参数不定长
4.输入由用例保证,不会出现不符合要求的输入

输入描述:

输入一行字符串,可以有空格

输出描述:

输出参数个数,分解后的参数,每个参数都独占一行

import java.util.*;public class Main{       public static void main(String[] args){           Scanner scan=new Scanner(System.in);        String str=scan.nextLine();        int count=0;        for(int i=0;i

题目:跳石板

题目描述

小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板

import java.util.*;public class Main{       public static void main(String[] args){           Scanner scan=new Scanner(System.in);        int n=scan.nextInt();        int m=scan.nextInt();        int[] step=new int[m+1];        for(int i=0;i
list=div(i); for(int j:list){ if(i+j<=m && step[i+j]!=Integer.MAX_VALUE){ step[i+j]=Math.min(step[i+j],step[i]+1); }else if(i+j<=m){ step[i+j]=step[i]+1; } } } if(step[m]==Integer.MAX_VALUE){ System.out.println(-1); }else{ System.out.println(step[m]); } } public static List
div(int num){ List
list=new ArrayList<>(); for(int i=2;i*i<=num;i++){ if(num%i==0){ list.add(i); if(num/i!=i){ list.add(num/i); } } } return list; }}

题目:计算日期到天数转换

题目:

根据输入的日期,计算是这一年的第几天。测试用例有多组,注意循环输入

输入描述:

输入多行,每行空格分割,分别是年,月,日

输出描述:

成功:返回输出计算后的第几天; 失败:返回-1

import java.util.*;public class Main{       public static void main(String[] args){           Scanner scan=new Scanner(System.in);        while(scan.hasNext()){               int y=scan.nextInt();            int m=scan.nextInt();            int d=scan.nextInt();            int sum=0;            int[] day={   31,59,90,120,151,181,212,243,273,304,334,365};            if(m>=2){                   sum+=day[m-2];            }              sum+=d;            if(y%400==0 || y%4==0&&y%100!=0){                   sum+=1;            }            System.out.println(sum);        }    }}

题目:幸运的袋子

题目描述

一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。
输入描述: 第一行输入一个正整数n(n ≤ 1000)
第二行为n个数正整数xi(xi ≤ 1000)
输出描述:
输出可以产生的幸运的袋子数

题解:

1.将袋子里面球的号码数排序
2.当一个号码和前面的号码无法组成幸运的袋子,那就直接break,因为后面的号码肯定比前面的数字大或等于,也无法构成幸运的袋子
3.当我们返回上层递归的时候,需要回溯,继续计算前面的号码和当前位置后面的号码是否可以构成幸运的袋子
回溯:sum减去当前号码,multi除以当前号码

import java.util.*;public class Main{       public static void main(String[] args){       Scanner scan=new Scanner(System.in);    int n=scan.nextInt();    int[] a=new int[n];        for(int i=0;i
mutil){ count=count+1+count(a,n,i+1,sum,mutil); }else if(a[i]==1){ count=count+count(a,n,i+1,sum,mutil); }else{ break; } sum=sum-a[i]; mutil=mutil/a[i]; while(i
上一篇:测试用例篇
下一篇:牛客 求最大连续bit数,二进制插入,查找组成一个偶数最接近的两个素数

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月02日 16时08分44秒