机试题

上午做了个机试题,没通过零分。总结了下,是AR没分解好,代码然成一坨调试很浪费时间。

中午吃饭想了下,20分钟编了出来,代码如下:

复制代码
 1 package test;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.Scanner;
 6 
 7 public class Main
 8 {
 9 
10     private static final int MAX_LEN = 50;
11 
12     private static int num = 0; // 2
13     private static int len = 0; // 8
14     private static String[] cont = null;    // {"abc", "123456789"}
15 
16     public static void main(String[] args)
17     {
18         processInput();
19         List<String> result = new ArrayList<String>();
20         for (String s : cont)
21         {
22             List<String> list = new ArrayList<String>();
23             formatStr(s, list);
24             result.addAll(list);
25         }
26         for (String s : result)
27         {
28             System.out.println(s);
29         }
30     }
31 
32     /**
33      * process input
34      */
35     private static void processInput()
36     {
37         Scanner cin = new Scanner(System.in);
38         int idx = 0;
39         if (cin.hasNext())
40         {
41             String s1 = cin.next();
42             String[] numAndLen = s1.split(",");
43             num = Integer.parseInt(numAndLen[0]);
44             len = Integer.parseInt(numAndLen[1]);
45             len = Math.min(len, MAX_LEN);
46         }
47         cont = new String[num];
48         while (idx < num)
49         {
50             cont[idx++] = cin.next();
51         }
52     }
53 
54     /**
55      * add zero to string tail
56      * @param str
57      * @return
58      */
59     private static String addZero(String str)
60     {
61         int sub = len - str.length();
62         for (int i = 0; i < sub; i++)
63         {
64             str += "0";
65         }
66         return str;
67     }
68 
69     /**
70      * process original string
71      * @param str
72      * @param list
73      */
74     private static void formatStr(String str, List<String> list)
75     {
76         if (str.length() <= len)
77         {
78             list.add(addZero(str));
79         }
80         else
81         {
82             list.add(str.substring(0, len));
83             formatStr(str.substring(len), list);
84         }
85     }
86 
87 }
复制代码

呵呵,想想应该遵循此原则。

1. 处理输入部分,先打桩数据,不做处理。  // 调试太麻烦

2. 按照思路,先写出方法名,内容随后补齐。

3. 必然涉及字符串补齐,先编并测。

4. 既然一开始就想到要递归,干脆将递归先写出来。

 

posted @   许仙儿  阅读(249)  评论(1编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示