目录
A题-塔
思路:签到题,26层,第i层先打印26-i个空格,然后正序和逆序打印字符,每一层换一行。
public class Main {
public static void main(String[] args) {
for(int i=1; i<=26; i++){
for(int j=1; j<=26-i; j++){
System.out.print(" ");
}
for(int k=1; k<=i; k++){
System.out.print( (char)(k + 'A'- 1));
}
for(int l=i-1; l>=1; l--){
System.out.print( (char)(l + 'A' - 1));
}
System.out.println();
}
}
}
B题-日记
思路:每次遇到相应的字母,就调3个,把相应的去掉就可以,测试用例应该有问题。
public class Main {
public static void main(String[] args) {
String s = "smrt cvrst aebteibtiou aa btbtbtbtpapaprpopalbtlapabba\n" +
"bas jebte dosadnbtna ova kbtkebtemibtija aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtbba\n" +
"aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtdcsc\n" +
"bas jebte dosadnbtna ova kbtkebtemibtija\n" +
"ibti lbtlovebte lbtlibtinbtnkbtkebtec\n" +
"sadnbtna ova kbtkebtemibtija aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtbbz\n" +
"aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtdcs\n" +
"bas jebte dosadnbtna ova kbtkebtemibtija" ;
String ans = "" ;
for(int i=0; i<s.length(); i++){
char c = s.charAt(i) ;
ans += c ;
if(c=='l' || c=='i' || c=='n' || c=='k' || c=='e'){
i += 3 ;
}
}
System.out.print(ans);
}
}
E题-神仙爱采药
思路:简单贪心,如果体积够用,有多少装多少,如果体积不够用,遇到体积为2的不用管,遇到体积为1的,将体积为2的踢出去,将体积为1的装进去,保证可以装的更多。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
int V = input.nextInt() ;
String s = input.next() ;
long ans = 0, volume=0, height=0, num2=0 ;
for(int i=0; i<s.length(); i++){
long c = s.charAt(i) - '0' ;
if(volume+c<=V){
if(c==2){
num2 ++ ;
}
volume += c ;
height ++ ;
}else{
if(num2>=1 && c==1){
volume -- ;
num2 -- ;
}
}
ans += height ;
}
System.out.println(ans);
}
}
这样写也是可以的,变量少一点,思路都是一样的。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
int V = input.nextInt() ;
String s = input.next() ;
long ans = 0, sum = 0, num2=0;
for(int i=0; i<s.length(); i++){
if(s.charAt(i)=='1' && V>=1){
ans ++ ;
V -- ;
}else if(s.charAt(i)=='1' && V<1){
if(num2>0){
num2-- ;
V ++ ;
}
}
if(s.charAt(i)=='2' && V>=2){
ans ++ ;
V -= 2 ;
num2 ++ ;
}
sum += ans ;
}
System.out.println(sum);
}
}
I题-奇怪的传输机增加了
思路:模拟每一天就可以,注意超过x天只能恢复一次,且最后打印的是YE5!和N0!不是YES!和NO!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
int N = input.nextInt() ;
int x = input.nextInt() ;
int y = input.nextInt() ;
double now = N ;
boolean flag = true ;
for(int i=1; i<=y; i++){
now = 2.0 * now / 3.0 ;
if(i>=x){
now = Math.min(now+(1.0*N/2), N) ;
x = Integer.MAX_VALUE ;
}
if(now<1.0*N/32){
System.out.println("N0!");
System.out.print(i + " ");
System.out.printf("%.6f", now);
flag = false ;
break ;
}
}
if(flag){
System.out.println("YE5!");
System.out.printf("%.6f", now);
}
}
}
J题-奇怪的小鸭子也增加了
思想:数学题,说真话,题目描述的一言难尽。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
int A = input.nextInt() ;
int B = input.nextInt() ;
int a = input.nextInt() ;
int b = input.nextInt() ;
int x = (A-a)/a/2 + 1 ;
int y = (B-b)/b/2 + 1 ;
System.out.println(x*y);
}
}
K题-关于哥俩好的数字数字这件事
同样的代码,C++不超时,Java超时!!!
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static final int N = 1000000;
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
int n = input.nextInt() ;
List<List<Integer>> ans1 = new ArrayList<>() ;
for(int i=0; i<N; i++){
ans1.add(new ArrayList<>()) ;
}
for(int i=1; i<=10000000; i++){
ans1.get(get(i)).add(i) ; ;
}
if(n==1){
System.out.println(1);
}else if(n<=10){
long res = 0 ;
for(int i=0; i<n; i++){
res += ans1.get(n-1).get(i) ;
}
System.out.println(res);
}else if(n>=11){
long res1 = Long.MAX_VALUE ;
for(int j=9; j<=20; j++){
long temp = 0 ;
for(int i=0; i<n; i++){
temp += ans1.get(j).get(i) ;
}
res1 = Math.min(temp, res1) ;
}
System.out.println(res1);
}
}
private static int get(int i){
int ans = 0 ;
while(i>0){
ans += i % 10 ;
i /= 10 ;
}
return ans ;
}
}