第一题爬楼梯
import java.util.Scanner;
public class anxin {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
System.out.print(climb(n));
}
public static int climb(int n){
int [] a=new int[n+1];
if(n==1){
return 1;
}
if(n==2){
return 2;
}
if(n>36||n<=0){
return 0;
}
a[1]=1;
a[2]=2;
for(int i=3;i<=n;i++){
a[i]=a[i-1]+a[i-2];
}
return a[n];
}
}
第二题分房子
三条规则
规则1:每户最少分得一套
规则2:人口多的家庭分的比人口少的多
规则3:人口相同的家庭分的可以不一样
求所有家庭最少分的房子总和
输入:【3,2,4】
输出:5
输入:【4,1,3,3,3】
输出:7
public static int house (int[] person) {
if(person==null){
return 0;
}
int n=person.length;
int [] a=new int[n];
int res=person[0];
for(int i=0;i<n;i++){
res=Math.min(res,person[i]);
}
int cnt=0;
for(int i=0;i<n;i++){
if(person[i]==res){
a[i]=1;
cnt=i;
}
}
for(int i=cnt-1;i>=0;i--){
if(person[i]>person[i+1]){
if(i+1==cnt){
a[i]=2;
}
a[i]=a[i+1]+1;
}
else if(person[i]<person[i+1]){
a[i]=a[i+1]-1;
}
else{
a[i]=1;
}
}
for(int i=cnt;i<n-1;i++){
if(person[i]>person[i+1]){
a[i+1]=a[i]+1;
}
else if(person[i]<person[i+1]){
if(i==cnt){
a[i+1]=2;
}
a[i+1]=a[i]+1;
}
else{
a[i+1]=1;
}
}
int sum=0;
for(int i=0;i<n;i++){
sum+=a[i];
}
return sum;
}
全部评论
(0) 回帖