300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 刷题_33:剪花布条 and 客似云来

刷题_33:剪花布条 and 客似云来

时间:2019-04-14 03:32:13

相关推荐

刷题_33:剪花布条 and 客似云来

一.剪花布条

题目链接:

剪花布条

题目描述:

一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?

输入描述:

输入包含多组数据。

每组数据包含两个字符串s,t,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。

输出描述:

对应每组输入,输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就输出0,每个结果占一行。

示例1:

输入:

abcde a3

aaaaaa aa

输出:

0

3

个人总结:

暴力模拟即可,也可以用KMP算法做,但我选择暴力,因为KMP忘了。

代码实现:

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String s = sc.nextLine();String[] strs = s.split(" ");System.out.println(fun(strs[0].toCharArray(), strs[1].toCharArray()));}}public static int fun(char[] s, char[] p) {int end = 0;int res = 0;while (end < s.length) {//如果相等 则可以匹配if (s[end] == p[0]) {int i = end;int j = 0;//开始匹配while (i < s.length && j < p.length && s[i] == p[j]) {i++;j++;}//如果匹配的p的末尾 则代表匹配成功 否则失败if (j == p.length) {res++;end = i;continue;}}end++;}return res;}}

二.客似云来

题目链接:

客似云来

题目描述:

NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。

于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……

现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。

输入描述:

测试数据包括多组。

每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天。

输出描述:

对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐。

个人总结:

一眼斐波那契数列,维护一个前缀和即可。

代码实现:

import java.util.*;public class Main {static long[] preSum = new long[82];public static void main(String[] args) {getFibs();Scanner sc = new Scanner(System.in);while (sc.hasNext()) {int from = sc.nextInt();int to = sc.nextInt();System.out.println(preSum[to] - preSum[from - 1]);}}public static void getFibs() {long fib1 = 1L;long fib2 = 1L;preSum[1] = fib1;preSum[2] = fib1 + fib2;;for (int i = 3; i <= 80; i++) {long fib3 = fib1 + fib2;fib1 = fib2;fib2 = fib3;preSum[i] = fib3 + preSum[i - 1];}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。