1、0的个数
问题描述
给定一个正整数 n ,请问 n 的十进制表示中末尾总共有几个 0 ?
输入格式
输入一行包含一个正整数 n。
输出格式
输出一个整数,表示答案。
样例输入
20220000
样例输出
4
评测用例规模与约定
对于所有评测用例,1 <= n <= 1000000000。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
String str = String.valueOf(x);
int sum = 0;
for(int i = str.length()-1;i>=0;i--){
if((char)str.charAt(i)!='0'){
break;
}
if((char)str.charAt(i)=='0'){
sum++;
}
}
System.out.println(sum);
}
}
2、超级质数
问题描述
如果一个质数 P 的每位数字都是质数, 而且每两个相邻的数字组成的两位 数是质数, 而且每三位相邻的数字组成的三位数是质数, 依次类推, 如果每相 邻的 k 位数字组成的 k 位数都是质数, 则 P 称为超级质数。
如果把超级质数 P 看成一个字符串, 则这个超级质数的每个子串都是质 数。
例如, 53 是一个超级质数。
请问, 最大的超级质数是多少?
答案提交
这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
static int max = 0;
public static void main(String[] args) {
for(int i = 2;i<=400;i++){
if(unique(i)){
max = i;
}
}
System.out.println(max);
}
static boolean isPrime(int n){
for(int i = 2;i<=n/2;i++){
if(n%i==0){
return false;
}
}
return true;
}
static boolean unique(int n){
if(!isPrime(n)){
return false;
}
while(n>0){
if(!isPrime(n%10)){
return false;
}
n/=10;
}
return true;
}
}
3、卡牌
问题描述
这天, 小明在整理他的卡牌。
他一共有 n 种卡牌, 第 i 种卡牌上印有正整数数 i(i∈[1,n]), 且第 i 种卡牌 现有 ai 张。
而如果有 n 张卡牌, 其中每种卡牌各一张, 那么这 n 张卡牌可以被称为一 套牌。小明为了凑出尽可能多套牌, 拿出了 m 张空白牌, 他可以在上面写上数 i, 将其当做第 i 种牌来凑出套牌。然而小明觉得手写的牌不太美观, 决定第 i 种牌最多手写 bi 张。
请问小明最多能凑出多少套牌?
输入格式
输入共 3 行, 第一行为两个正整数 n,m 。
第二行为 n 个正整数 a1,a2,…,an 。
第三行为 n 个正整数 b1,b2,…,bn 。
输出格式
一行, 一个整数表示答案。
样例输入
4 5
1 2 3 4
5 5 5 5
样例输出
3
样例说明
这 5 张空白牌中, 拿 2 张写 1 , 拿 1 张写 2 , 这样每种牌的牌数就变为了 3,3,3,4, 可以凑出 3 套牌, 剩下 2 张空白牌不能再帮助小明凑出一套。
评测用例规模与约定
对于 30%30% 的数据, 保证 n≤2000;
对于 100%100% 的数据, 保证 n≤2×105;ai,bi≤2n;m≤n2 。
import java.util.*;
import java.io.*;
public class 卡牌 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
static int n;
static long m;
static int a[];
static int b[];
public static void main(String[] args) throws IOException{
String []str = in.readLine().split(" ");
n = Integer.parseInt(str[0]);
m = Long.parseLong(str[1]);
a = new int[n];
b = new int[n];
String[] s = in.readLine().split(" ");
for(int i = 0;i<n;i++){
a[i] = Integer.parseInt(s[i]);
}
String[] st = in.readLine().split(" ");
for(int i = 0;i<n;i++){
b[i] = Integer.parseInt(st[i]);
}
int l = 0,r = n;
while(l<r){
int mid = (l+r+1)>>1;//防止死循环,答案目标在右边
if(check(mid)){
l = mid;
}else{
r = mid-1;
}
}
out.println(l);
out.flush();
in.close();
}
static boolean check(int mid){
long value = m;
for(int i=0;i<n;i++){
if(a[i]>=mid){//无需补充卡牌,还有余量,让mid继续变大
continue;
}
if(a[i]+b[i]<mid){//当前卡牌补充最大数量的卡牌依然不满足,那么说明mid不对,直接返回false,继续让mid减小
return false;
}
if(value>=mid-a[i]){//所有类型的牌如果可以用空白牌(value)补充完,那么就返回true,如果当前有一种牌不能补充完,则返回false。
value-=(mid-a[i]);//vaule将为了补充所用的牌去掉
}else{
return false;
}
}
return true;
}
}
4、染色时间
问题描述
小蓝有一个 n 行 m 列的白色棋盘, 棋盘的每一个方格都可以被染成彩色。
每个方格有一个染色时间 tij, 不同方格的染色时间可能不同。如果一个方 格被触发了染色, 这个方格就会在 tij 秒之后变成彩色, 然后将自己上下左右四 个方向相邻的方格触发染色。每个方格只能被触发染色一次, 第一次触发之后 的触发为无效触发。
给定每个方格的染色时间, 在时刻 0 触发第一行第一列的方格染色, 请问 多长时间后整个棋盘完成染色。
输入格式
输入的第一行包含两个整数 n,m, 分别表示棋盘的行数和列数。
接下来 n 行, 每行 m 个正整数, 相邻的整数之间用一个空格分隔, 表示每 个方格的染色时间。该部分的第 i 行第 j 个整数表示 tij, 即第 i 行第 j 列的方 格的染色时间。
输出格式
输出一行包含一个整数, 表示整个棋盘完成染色的时间。
样例输入
2 3
1 2 3
4 5 6
样例输出
12
评测用例规模与约定
对于 3030 的评测用例, 1≤n,m≤10 。
对于 6060 的评测用例,1≤n,m≤50 。
对于所有评测用例, 1≤n,m≤500,1≤tij≤1000 。