1.列表项目
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int A=in.nextInt();
int B=in.nextInt();
int n=in.nextInt();
if(A>=1 && A<=1000 && B>=1 && B<=1000 && n>=1 && n<=100000000){
if(A==0 && B==0 && n==0){
break;
}
int a[]=new int[n];
if(n==1){
a[0]=1;
}
if(n==2){
a[0]=1;
a[1]=1;
}
if(n>2){
a[0]=1;
a[1]=1;
for(int i=2;i<n;i++){
a[i]=(A * a[i-1] + B * a[i-2])%7;
}
}
System.out.println(a[n-1]);
}
}
}
我这样写,显示错误。不知道哪里错了。
我这样写对的,不知道上一种方法哪里错了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这是斐波那契的变种,三种方法可以得出结果,第一种是传统的递归模式(效率极低,请勿使用),第二种是尾递归,第三种是单次循环,都可以使用。
public class Main {
private int A,B;
Main(int A,int B){
this.A=A;
this.B=B;
}
// 递归,效率极低
public int answer(int n){
if(n==1 || n==2)return 1;
return (A*answer(n-1)+B*answer(n-2))%7;
}
// 尾递归,效率高
public int answer2(int n){
return answer2(n,1,1);
}
public int answer2(int n,int x,int y) {
if(n==1 || n==2)return y;
return answer2(n-1,y,(A*y+B*x)%7);
}
// 单次循环,效率高
public int answer3(int n){
if(n==1 || n==2)return 1;
int x=1,y=1;
for(int i=3;i<=n;i++){
int z=y;
y=(A*y+B*x)%7;
x=z;
}
return y;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int A=in.nextInt(),B=in.nextInt(),n=in.nextInt();
if(A==0 && B==0 && n==0){
break;
}
if(A>=1 && A<=1000 && B>=1 && B<=1000 && n>=1 && n<=100000000){
System.out.println(new Main(A,B).answer3(n));
}
}
}
}