目录
1.Fibonacci数列
①题目示例:
②方法解析:
a.我们可以发现能够在一个范围里,通过改变f3,f2,f1来使得斐波那契数一直处于这三个数之列
b.在理解清楚题意后,我们可以知道,当给出一个数后,要将它变为斐波那契数有两种办法,一个是向左递减,第二个是向右递增,而题目要求需要求的最少步数则很显然是将两个取较小值。
举个例子:
c.我们就需要来判断当输入的n=斐波那契数的时候,它是属于left,还是属于right。我们通过下面的代码很容易知道它是属于right(这里自己想一下,很容易明白的)
代码:
import java.util.*; public class Main{ public static void main(String[]args){ Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int f1=0; int f2=1; while(n>f2){ int f3=f2+f1; f1=f2; f2=f3; }//当此处循环退出的时候,n<=f2,这个时候,就说明f2就是右边的项,而F1就是左边的一项 int min=Math.min(n-f1,f2-n); System.out.println(min); } }
2.不要二
①题目示例:
②方法解析:
a.由题意,我们首先可以知道这是一个二维数组
b.然后我们将平方根转变为平方后即为:
((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))=4
而能够满足这个等式只有下面5种情况
0+4=4
1+3=4
2+2=4
3+1=4
4+0=4
而因为每个数都是整数,所以我们排除了3种情况,只剩下
0+4=4
4+0=4这两种情况
即当x1=x2时,y1=y2+2;
当y1=y2时,有x1=x2+2;这就说明当某处放了蛋糕后,它的这两个位置就不能放入蛋糕。
c.我们初始将整个数组的值置为0,然后每存放一个蛋糕用一个count计数,不能放蛋糕的地方置为1
代码:
import java.util.*; public class Main{ public static void main(String[]args){ Scanner sc=new Scanner(System.in); int W=sc.nextInt(); int H=sc.nextInt(); int count=0; //把二维数组所有的值的大小置为0,当它能存放蛋糕时,count++;不能放蛋糕的位置就置为1 int [][]tmp=new int[W][H]; for(int i=0;i<W;i++){ for(int j=0;j<H;j++){ if(tmp[i][j]==0){ count++; //当此处已经放了蛋糕,那么距离它的欧几里得距离就不能超过2 //情况①:同i;j+2,判断j是否越界 if(j+2<H){ tmp[i][j+2]=1; } //情况②:同j,i+2;判断i是否越界 if(i+2<W){ tmp[i+2][j]=1; } } } } System.out.println(count); } }