链接: link
描述
Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。
输入描述:
输入为一个正整数N(1 ≤ N ≤ 1,000,000)
输出描述:
输出一个最小的步数变为Fibonacci数"
示例1
输入:
15
输出:
2
Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13,第一个数0,和第二个数1是固定的,往后的每一个数都等于前两个数相加。现在我们知道一个数n,想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,也就是说求n这个数离最近的Fibonacci数的值。
那么我们就可以让N处于两个Fibonacci数之间,后一个Fibonacci数大于n,前一个小于n,让我们再取最小值,即为我们的所求值,于是我们定义f1=0,f2=1,这两个值是固定的,然后我们将循环定位n>f2,让n小于f2的时候退出,此时n就正好处于中间位置,此时求得最小值就是结果。至于怎么样Fibonacci数变大就很容易了,让前两个数相加就是第三个数,以此类推,定义一个f3=f1+f2;让f1=f2;f2=f3;就可以了。
最后输出n-f1,f2-n的最小值
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int f1=0;
int f2=1;
while(n>f2)
{
int f3=f1+f2;
f1=f2;
f2=f3;
}
int min=Math.min(n-f1,f2-n);
System.out.println(min);
}
}
链接: link
描述
给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。
测试样例:
“(()())”,6
返回:true
测试样例:
“()a()()”,7
返回:false
测试样例:
“()(()()”,7
返回:false
1.首先字符串只能由括号组成,而括号是一对一对的,所以长度是偶数,所以如果n是奇数,那么一定是不符合的,直接返回false;
2.我们要想办法存储括号这个时候我们就会想到用栈来存储,栈=》先进后出,所以我们遍历字符串,如果遇到 “( ”。我们就将‘( ’入栈,反之遇到“)”,我们就出栈。
但是在出栈的时候要注意,栈是否为空,比如字符串第一个字符是“)”,那么这就是一个不合法的或者前面,前面的都匹配上了,但是接下来的是“)”,也是一个不合法的,此时栈里面为空,这个时候我们直接返回false就可以。当栈不为空的时候,我们还要判断栈顶是否是“( ”,如果是“(”,那我们就直接出栈。
最后判断栈是否为空,如果为空就说明“(”和“)”的数量是匹配的,这个时候就是合法的,如果不为空就返回false。
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String str, int n) {
if(n%2==1)
{
return false;
}
char[] ch=str.toCharArray();
Stack<Character> stack=new Stack<>();
for(int i=0;i<ch.length;i++)
{
if(ch[i]=='(')
{
stack.push(ch[i]);
}
if(ch[i]==')')
{
if(stack.isEmpty())
{
return false;
}
if(stack.peek()=='(')
{
stack.pop();
}
}
}
if(stack.isEmpty())
{
return true;
}
return false;
}
}
JAVA属于( D)
A 操作系统
B 办公软件
C 数据库系统
D 计算机语言
类声明中,声明抽象类的关键字是 (B )
A public
B abstract
C final
D class
public是修饰权限的
abstract是抽象类
final 是常量,被定义的方法不可以被继承,定义的变量是常量不易被改变
3.在使用 interface 声明一个接口时,只可以使用(D)修饰符修饰该接口
A private
B protected
C private protected
D public
interface接口只能用public修饰
round函数是四舍五入
A Java中的继承允许一个子类继承多个父类
B 父类更具有通用性,子类更具体
C Java中的继承存在着传递性
D 当实例化子类时会递归调用父类中的构造方法
JAVA允许一个子类继承一个父类
6.在 java 中 , 一个类(B)
A 可以继承多个类
B 可以实现多个接口
C 在一个程序中只能有一个子类
D 只能实现一个接口
可以继承一个类
实现多个接口
可以有多个子类
7.关于以下程序代码的说明正确的(D)
class HasStatic{
private static int x = 100;
public static void main(String args[ ]){
HasStatic hs1 = new HasStatic();
hs1.x++;
HasStatic hs2 = new HasStatic();
hs2.x++;
hs1=new HasStatic();
hs1.x++;
HasStatic.x–;
System.out.println( “x=” +x);
}
}
A 5行不能通过编译,因为引用了私有静态变量
B 10行不能通过编译,因为x是私有静态变量
C 程序通过编译,输出结果为:x=103
D 程序通过编译,输出结果为:x=102
x是静态的变量,不管是类调用还是对象调用都是x
8.以下 _____ 不是 Object 类的方法(====)
A clone()
B finalize()
C toString()
D hasNext()
9.下面哪一项不是 java 类访问权限控制关键字(B)
A public
B this
C private
D protected
public private protected都是JAVA类修饰的权限
10.java 语言使用的字符码集是(D)
A ASCII
B BCD
C DCB
D Unicode
ASCII是针对特殊字符的
BCD是针对数字的