• 【day13】每日一题——参数解析&跳石板


    参数解析_牛客题霸_牛客网

    思路:

    1.个数 = 双引号外面的空格数量 + 1;

    2.遍历字符串,一直打印 

    3.遇到双引号外面的空格,换行

    4.双引号里面,遇到空格也一直打印,用一个变量来控制空格是双引号里面的空格还是双引号外面的空格

    1. import java.util.Scanner;
    2. // 注意类名必须为 Main, 不要有任何 package xxx 信息
    3. public class Main {
    4. public static void main(String[] args) {
    5. Scanner in = new Scanner(System.in);
    6. String str = in.nextLine();
    7. int count = 0;
    8. //开始遍历找空格的个数
    9. for(int i = 0; i < str.length(); i++){
    10. //如果这是遇到第一个双引号就一直遍历,直到遇到第二个双引号才结束
    11. if(str.charAt(i) == '"'){
    12. do{
    13. i++;
    14. }while(str.charAt(i) != '"');//do的使用
    15. }
    16. //如果遇到双引号外的空格就计数
    17. if(str.charAt(i) == ' '){
    18. count++;
    19. }
    20. }
    21. //遍历结束后,count就是空格的个数
    22. //这时要打印参数个数
    23. //参数个数 = count + 1;
    24. System.out.println(count + 1);
    25. //打印完参数个数,开始打印字符串
    26. //定义一个flag来控制打印双引号里面的空格
    27. int flag = 1;
    28. for(int i = 0; i < str.length(); i++){
    29. //如果这时遇到第一个双引号,改变flag=0;
    30. //遇到第二个双引号的时候再改变=1
    31. //在flag=0期间,一直打印
    32. if(str.charAt(i) == '"'){
    33. flag ^= 1;//异或将1变成零,将0变成1
    34. }
    35. //1.如果不是空格和双引号就一直打印
    36. if(str.charAt(i) != ' ' && str.charAt(i) != '"'){
    37. System.out.print(str.charAt(i));
    38. //这时候不用换行,一直打印
    39. }
    40. //2.如果遇到双引号里面的空格,也一直打印
    41. if(str.charAt(i) == ' ' && flag == 0){
    42. System.out.print(str.charAt(i));
    43. }
    44. //3.遇到双引号外面的空格要换行
    45. if(str.charAt(i) == ' ' && flag == 1){
    46. System.out.println();
    47. }
    48. }
    49. }
    50. }

    跳石板_牛客题霸_牛客网

    1.第一部分:step 的长度为m+1,是为了与石板号从1开始对应上,而不是从0,然后把元素全部设置为默认值,方便之后的比较

    2.写一个专门求一个数的约数的方法,把一个数的约数存放在一个list里面,以便遍历list来跳石板

    3.第二部分开始跳跃,把小易站的位置设置为0,代表跳跃的次数,也可以说此时还没有跳,跳的次数为0

    4.开始跳跃后,是通过遍历数组里面的每一个下标来跳跃的,当到达当前下标,如果为默认值就说明前面的跳跃是直接略过了这块石板,所以继续往下一个石板遍历

    5.跳的时候遍历约数list来跳,j代表一次性能跳多少块石板,i代表当前所在位置~~

    6.第一个if表示,这不是第一次跳到这块石板,所以直接比较之前跳到这块石板所用的次数和现在(也就是另外一个约数)跳到这块石板所用的次数谁打谁小

    7.else if表示是第一次跳到,前面的最优结果加上1就是当前石板的最优解~也就是最小次数

    8.跳完所有石板后开始判断(第三部分)如果m下标还是为默认值,就说明没有跳到m石板上过

    否则就直接打印出step[m],表示当前石板上的最优解

    1. import java.util.*;
    2. // 注意类名必须为 Main, 不要有任何 package xxx 信息
    3. public class Main {
    4. public static void main(String[] args) {
    5. //1
    6. Scanner in = new Scanner(System.in);
    7. int n = in.nextInt();
    8. int m = in.nextInt();
    9. int[] step = new int[m+1];
    10. for(int i = 0; i < m+1; i++){
    11. step[i] = Integer.MAX_VALUE;
    12. }
    13. //2
    14. step[n] = 0;
    15. for(int i = 0; i < m; i++){
    16. if(step[i] == Integer.MAX_VALUE){
    17. continue;
    18. }
    19. List list = div(i);
    20. for(int j : list){
    21. if(i+j <= m && step[i+j] != Integer.MAX_VALUE){
    22. step[i+j] = Math.min(step[i+j],step[i]+1);
    23. }else if(i+j <= m){
    24. step[i+j] = step[i]+1;
    25. }
    26. }
    27. }
    28. //3
    29. if(step[m] == Integer.MAX_VALUE){
    30. System.out.println(-1);
    31. }else{
    32. System.out.println(step[m]);
    33. }
    34. }
    35. //求约数
    36. public static List div(int num){
    37. List list = new ArrayList();
    38. for(int i = 2; i*i <= num; i++){
    39. if(num%i == 0){
    40. list.add(i);
    41. if(num/i != i){
    42. list.add(num/i);
    43. }
    44. }
    45. }
    46. return list;
    47. }
    48. }
  • 相关阅读:
    企业提升效率的秘密武器,推荐J2L3x聊天软件!
    ERC-721隐私问题防护方案
    Jmeter(116)——写入xls登录案例实战
    R语言使用scale函数对神经网络的输入数据进行最小最大缩放、把数据缩放到0到1之间、并划分数据集为训练集和测试集
    (js)如何删除数组的最后一项
    ActiveMQ安装
    行为型设计模式-状态模式
    React - 插槽
    ES6 入门教程 3 变量的解构赋值 3.2 对象的解构赋值
    ​力扣解法汇总1282-用户分组
  • 原文地址:https://blog.csdn.net/qq_61862008/article/details/127619912