第一题爬楼梯
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】 输出:7public 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) 回帖