今天上午刚起床发现已经快笔试了,果断开电脑,一共60分钟,3道编程题,没有什么性格测试也没选择题。。。出乎意外,但是状态不佳,第二道题快出来的时候,时间不够了。还是得吃东西啊。。。晚上想起,还是继续调试弄出来吧。
题目二:
给定一组1~7组成(包含1和7)的有序且非重复数字数组, 每个数字的字面值n表示一周里面的第n天, 要求按照如下规则压缩后, 输出压缩以后的描述:
1) 对于三个及三个以上的连续数字, 需要压缩成”起始-结束”的格式;
2) 对于三个以下的连续或不连续数字, 不需要压缩, 按照原样输出;
输入描述:
第一行整数n(1 <= n <= 7),代表数组长度
接下来n行,每行一个整数,代表数组中的一个元素
格式如下:
数组长度n
数组第1个数
数组第2个数
…
数组第n个数
输出描述:
按照题目要求压缩之后的数字序列, 序列的每一段之间使用英文逗号分隔, 输出为一行.
示例1
输入
5 1 3 4 5 7
输出
1,3-5,7
示例2
输入
2 1 2
输出
1,2
以上为题目所有,看起来简单,也确实简单。但是一开始并未想好,加上牛客网的编程提交忘记是用的Scanner,试了好久,一直以为是main函数传参。。怎么说呢,糊涂了。
解法(关键在于将不确定的确定下来,再慢慢调试):
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = scanner.nextInt(); int[] s = new int[count]; for (int i = 0; i < s.length; i++) { if (scanner.hasNext()) { s[i] = scanner.nextInt(); } } //------------------以上为拿到输入数据--------下面的数据为模拟输入------------------- // int[] s = {1, 3, 4, 5, 6, 3, 4, 5, 7,8,9,10,7}; //数据长度小于3就直接输出吧,无论是不是连续的 if (s.length < 3) { for (int l = 0; l < s.length; l++) { System.out.print(s[l]); if (l < s.length - 1) { System.out.print(","); } } return; } //如果数据有一定长度,题目说小于7,但是我这里没考虑上线,两个游标,一个是m 一个是n n是比m大一的数 for (int m = 0; m < s.length; m++) { int n = m + 1; //首先游标大1的那个 不能超过数组长度 并且连续代表差值为1 if (n < s.length && s[n] - s[m] == 1) { //这里使用递归来判断到底有多少个连续的数 int times = isContinue(s, n, m, 0); //int times=2; 这里是数据{1,3,4,5,7},也就是给定的测试数据的模拟实现,用于测试主框架是否正确 从0开始 3个连续的就只会到2 因为只需要4-3 5-4两组 if (times >= 2) { //如果有2次,说明就是3个连续的数。这里将m移动到最后一个数 可以看成end m = m + times; System.out.print(s[n - 1] + "-" + s[m]); } } else { //如果当前位置连续的可能性为0 就直接输出吧 System.out.print(s[m]); } //逗号的判断,没什么好说的 if (m != s.length - 1) { System.out.print(","); } } } /** * @s 数组本身 * @x 需要判断的元素起始位置 也就是前一个数 * @y x的后一个数 * @count 如果后面的数-前一位的数=1 则每次+1 */ public static int isContinue(int[] s, int y, int x, int count) { if (y < s.length && s[y] - s[x] == 1) { count++; x++; y++; //递归直到s[y] - s[x] != 1 return isContinue(s, y, x, count); } return count; } }
我想注释已经很清楚了。上图:
题目上的也是满足的。
经验总结:
这种题本身不用考虑太多,就是可能直接一次写下来会有很多问题无法拿捏,这时可以考虑用填空法,将未知的用确定的数字去填充,然后再去具体的实现细节。
本站由以下主机服务商提供服务支持:
0条评论