import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int len=in.nextInt();
int[] item=new int[len];
for(int i=0;i<len;i++){
item[i]=in.nextInt();
}
in.close();
int count=0; //转换次数
int i=0, j=len-1;
while(i<j){
while(i<j && item[i]<item[j]){
i++;
item[i] += item[i-1]; //加上前一个遍历的值
count++;
}
if(item[i]==item[j]){
i++;
j--;
continue; //相等则同时向中间移,并进入下一轮循环
}
while(i<j && item[i]>item[j]){
j--;
item[j] += item[j+1];
count++;
}
if(item[i]==item[j]){
i++;
j--;
continue;
}
}
System.out.println(count);
}
}
优雅的点
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int radiusSquare=scanner.nextInt();
scanner.close();
int count=0; //优雅点个数
int radius=(int) Math.sqrt(radiusSquare);//”假”半径
//radius小于等于真实半径
//如果从i=0递增,i<radius,如果radius小于真实半径且为整数,(0,radius)和(radius,0)都是优雅点且在在统一象限,但i<radius,所以少计数一次
//如果从i=0递增,i<=radius,如果radius等于真实半径且为整数,(0,radius)和(radius,0)都是优雅点,单个象限多计数了一次
for(int x=radius;x>0;x--){
int y=(int) Math.sqrt(radiusSquare-x*x);
if(x*x+y*y==radiusSquare){
count++;
}
}
System.out.println(count*4); //四个象限
}
}
跳石板
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int M = scanner.nextInt();
scanner.close();
int res=leastJump(N, M);
System.out.println(res);
}
public static int leastJump(int N, int M){
//石板编号为索引,到达该石板所需最少步数为数组值
int steps[]=new int[M+1]; //从N到M,记录到每一个位置所需的步数
for(int i=N+1;i<=M;i++){ //起始位置steps[N]为0,其余初始化为Integer.MAX_VALUE
steps[i]=Integer.MAX_VALUE;
}
for(int i=N;i<=M;i++){
//如果steps[i]为Integer.MAX_VALUE,即为不可达,跳过不处理
if(steps[i]!=Integer.MAX_VALUE){
ArrayList<Integer> list=getAllFactor(i);
for(Integer each:list){
int temp=i+each; //到达的位置(石板编号)
int count=steps[i]+1; //到达下一个石板steps[temp]最少步数 = 到达当前石板最少步数 + 1
if(temp<=M&&count<steps[temp]){ //如果从i到达位置tmp的次数比以前记录的小,更新steps[tmp]
steps[temp]=count;
}
}
}
}
return steps[M]==Integer.MAX_VALUE?-1:steps[M];
}
// 获取N所有大于1、小于N的约数
public static ArrayList<Integer> getAllFactor(int N) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 2; i <= Math.sqrt(N); i++) {
if (N % i == 0) {
list.add(i);
if (i != N / i) { // 防止重复添加,如16=4*4
list.add(N / i);
}
}
}
return list;
}
}
暗黑的字符串
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
System.out.println(getBlackStr(n));
}
public static long getBlackStr(int n){
if(n<1) return -1;
long dp[]=new long[31]; //题目n范围为[1,30]
dp[1]=3;
dp[2]=9;
for(int i=3;i<=n;i++){
dp[i]=2*dp[i-1]+dp[i-2];
}
return dp[n];
}
}
数字翻转
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int x=scanner.nextInt();
int y=scanner.nextInt();
scanner.close();
System.out.println(rev(rev(x)+rev(y)));
}
public static int rev(int num){
//计算每位数
ArrayList<Integer> list=new ArrayList<>();
while(num>0){
int mod=num%10;
list.add(mod);
num /= 10;
}
//从非0开始
int beginning=list.size()-1;
for(beginning=list.size()-1;beginning>=0;beginning--){
if(list.get(beginning)!=0){
break;
}
}
//计算rev结果
int res=0;
int times=1;
for(;beginning>=0;beginning--){
res += list.get(beginning) * times;
times *= 10;
}
return res;
}
}