1、卡片
思路:既然是从1开始拼的,那么只需要计算1用完时卡片数字进行到多少了即可。
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9各 3 张,则小蓝可以拼出 1 到 10,
但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021张,共 20210 张,请问小蓝可以从 1 拼到多少?
提示:建议使用计算机编程解决问题。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
static int nums = 0;
public static void main(String[] args) {
for(int i =1;;i++){
String str = String.valueOf(i);
for(int j = 0;j<str.length();j++){
if(str.charAt(j)=='1'){
nums++;
if(nums==2021){
System.out.println(i);
return;
}
}
}
}
}
}
2、路径
填空题,答案:10266837
由于是查找最短路径,所以在这里我使用的是Floyd算法
1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
2,对于每一对顶点 i 和 j,看看是否存在一个顶点 k 使得从 i 到 k 再到 j 比已知的路径更短。如果是更新它。
小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。
小蓝的图由 2021 个结点组成,依次编号 1 至 2021。
对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。
例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。
请计算,结点 1 和结点 2021 之间的最短路径长度是多少。
提示:建议使用计算机编程解决问题。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class 路径 {
static int [][]floyd = new int[2022][2022];
static int [][]path = new int[2022][2022];
public static void main(String[] args) {
for(int i =1;i<=2021;i++){
for(int j=i+1;j<=2021&&j-i<=21;j++){
floyd[i][j]=floyd[j][i]=lcm(i,j);//由于是无向图所以,i与j与j与i的边是一样的
}
}
for(int k=1;k<=2021;k++){
for(int i=1;i<=2021;i++){
for(int j=1;j<=2021;j++){
//如果i到k和j到k之间的边为0,即为不存在,那么就没必要更新,如果存在,那么看新路径是否比原来的短,短则更新,当然,如果原来本就不存在,那么肯定要更新
if(floyd[i][k]!=0&&floyd[j][k]!=0&&(floyd[i][j]==0||floyd[i][k]+floyd[j][k]<floyd[i][j])){
floyd[i][j]=floyd[i][k]+floyd[k][j];//将最短路径更新
}
}
}
}
System.out.println(floyd[1][2021]);
}
static int lcm(int i ,int j){//求最小公倍数
return i*j/gcd(i,j);
}
static int gcd(int i,int j){//求最大公因数
return j!=0?gcd(j,i%j):i;
}
}
3、字符统计
思路:将字符串中的每个字符出现次数单独进行存储,由于都是大写字母,所以可以减去65(A的ASCii值为65)来进行存储。然后将出现次数最多的次数算出来,随后将每个字母出现的次数与之比较,相同即输出其字母。
问题描述
给定一个只包含大写字母的字符串 S, 请你输出其中出现次数最多的字符。
如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。
输入格式
一个只包含大写字母的字符串 S.
输出格式
若干个大写字母,代表答案。
样例输入
BABBACAC
样例输出
AB
评测用例规模与约定
对于 100%100% 的评测用例, 1≤∣S∣≤106.
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class 字符统计 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
String str = scan.next();
int []s = new int[26];
for(int i = 0;i<str.length();i++){
s[str.charAt(i)-65]++;
}
int max = 0;
for(int i=0;i<s.length;i++){
max = Math.max(max,s[i]);
}
for(int i=0;i<s.length;i++){
if(s[i]==max){
System.out.print((char)(65+i));
}
}
}
}
4、还不太清楚