连续最大和
代码
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int []arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
int max=arr[0];
int sum=arr[0];
for(int i=1;i<arr.length;i++){
if(sum>=0){
sum=sum+arr[i];
}else{
sum=arr[i];
}
max=Math.max(sum,max);
}
System.out.println(max);
}
}
}
不要二
把所有格子都先定义为正常的格子,通过规则,将不能放的格子标记出来,最后看还有几个格子能放
代码
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int m=sc.nextInt();
int n=sc.nextInt();
int [][]arr=new int[1000][1000];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
arr[i][j]=1;
}
}
int res=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i+2<m){
arr[i+2][j]=-1;
}
if(j+2<n){
arr[i][j+2]=-1;
}
if(i-2>=0){
arr[i-2][j]=-1;
}
if(j-2>=0){
arr[i][j-2]=-1;
}
if(arr[i][j]==1){
res++;
}
}
}
System.out.println(res);
}
}
}
把字符串转换成整数
掌握
单个字符减去‘0’,多是用于字符转数字的时候(如:‘8’ - ‘0’ 的计算结果就是8)
import java.util.*;
public class Solution {
public int StrToInt(String str) {
char[]arr=str.toCharArray();
int flag=1;
int sum=0;
if(str.isEmpty()){
return 0;
}
if(arr[0]=='+'){
flag=1;
arr[0]='0';
}
else if(arr[0]=='-'){
flag=-1;
arr[0]='0';
}
for(int i=0;i<arr.length;i++){
if(arr[i] < '0' || arr[i] > '9') {
sum = 0;
break;
}
sum = sum *10 + arr[i] - '0';
}
return flag * sum;
}
}
Fibonacci数列
思路
本题可以通过先找到距离N最近的两个Fibonacci数,这两个数分别取自距离N的最近的左边一个数L和右边一个数R,然后通过min(N - L, R - N)找到最小步数。
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int f1=0;
int f2=1;
int f3;
while(n>f2){
f3=f1+f2;
f1=f2;
f2=f3;
}
if(Math.abs(n-f2)>Math.abs(n-f1)){
System.out.println(Math.abs(n-f1));
}
if(Math.abs(n-f2)<Math.abs(n-f1)){
System.out.println(Math.abs(n-f2));
}
}
}
}