题目1:
描述
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。
小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
数据范围:输入的正整数满足 1≤�≤100 1≤n≤100
注意:本题存在多组输入。输入的 0 表示输入结束,并不用输出结果。
输入描述:
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。
输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
示例1
输入:
3 10 81 0
复制输出:
1 5 40
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int num=0;
while((num=in.nextInt())!=0){
System.out.println(getNum(num));
}
}
public static int getNum(int n){
int sum=0;
//n为剩余瓶子的总数
while(n>1){
//每3个瓶子就可以换一个,因此可以先分为3个一组
sum+=n/3;
//分成的3个换成了一个空瓶,剩余瓶子的总数等于换来的+剩下的
n=n/3+n%3;
//n为2的时候自增1
if(n==2){
sum++;
break;
}
}
return sum;
}
}
题目2:
HJ65 查找两个字符串a,b中的最长公共子串
- 题目
- 题解(368)
- 讨论(461)
- 排行
- 面经
new
中等 通过率:32.11% 时间限制:1秒 空间限制:32M
知识点字符串
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
描述
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!
数据范围:字符串长度1≤�����ℎ≤300 1≤length≤300
进阶:时间复杂度:�(�3) O(n3) ,空间复杂度:�(�) O(n)
输入描述:
输入两个字符串
输出描述:
返回重复出现的字符
示例1
输入:
abcdefghijklmnop abcsafjklmnopqrstuvw
复制输出:
jklmnop
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String a=in.next();
String b=in.next();
if(a.length()<b.length()){
System.out.println(findLongestCommonSubstring(a,b));
}else{
System.out.println(findLongestCommonSubstring(b,a));
}
}
public static String findLongestCommonSubstring(String a, String b) {
int m = a.length();
int n = b.length();
// dp[i][j]表示a的前i个字符和b的前j个字符之间的最长公共后缀长度
int[][] dp = new int[m + 1][n + 1];
int maxLength = 0; // 最长公共子串的长度
int startIndex = 0; // 最长公共子串在a中开始的位置
// 动态规划求解
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (a.charAt(i - 1) == b.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
if (dp[i][j] > maxLength) {
maxLength = dp[i][j];
startIndex=i-maxLength;
}
}
}
}
// 如果找到最长公共子串,返回该子串;否则返回空字符串
return a.substring(startIndex, startIndex+maxLength);
}
}