1.简介
最近一直在做算法到研究,有幸和几个朋友研究算法题,这篇文章主要是在习题中的一个汇总。
- 输入一个正整数repeat ,repeat>0&&repeat<10 ,做repeat次下列运算
输入2个正整数m和n(1<=m,n<=1000),输出m到n之间到所有完数(完书就是因子和它本身相等到数)
/**
* Created by 夜夜 on 16/10/13.
* 输入一个正整数repeat(0<repeat<10),做repeat次下列运算
* 输入2个正整数m和n(1<=m,n<=1000),输出m到n之间到所有完数(完书就是因子和它本身相等到数)
* 备注:
* 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”
*/
import java.util.Scanner;
import java.text.DecimalFormat;
public class Maths {
public String test(){
String result="";
//利用Scanner读取repeat数据
Scanner in = new Scanner(System.in); // Scanner类
System.out.println("Please input repeat:");
int repeat = in.nextInt(); // 接收数据
//判断repeat的取值范围
if(repeat<=0||repeat >=10)
{
result ="repeat 取值范围为:1-10";
return result;
}
//利用Scanner读取m数据
Scanner inm = new Scanner(System.in); // Scanner类
System.out.println("Please input m:");
int m = inm.nextInt(); // 接收数据
//利用Scanner读取n数据
Scanner inn = new Scanner(System.in); // Scanner类
System.out.println("Please input n:");
int n = inm.nextInt(); // 接收数据
//判断m的取值范围
if(m<1)
{
result ="m 取值范围为:m>=1";
return result;
}
//判断n的取值范围
if(n<=0||n>1000)
{
result ="n 取值范围为:0<n<=1000";
return result;
}
//判断m,n的大小
if(m>n)
{
result ="m不能大于n";
return result;
}
for(int i=0;i<repeat;i++){
for(int j=m;j<=n;j++){
int sum=0;
if(j==1)System.out.println(j);
//完数到因子不包含完数本身
for(int k=1;k<j;k++){
if(j%k==0) sum+=k;
}
if(j==sum) System.out.println(j);
}
}
return result;
}
public static void main(String[] args) {
Maths maths=new Maths();
String results=maths.test();
System.out.println(results);
}
}
2.斐波纳切数列
在数学中斐波纳切数列F是这样定义的F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1.现在我有另外一个序列G,G(n)=G(n-1)+G(n-2),G(0)=1,G(1)=t(t>=1)
你的任务对于给定的i,G(i)和j输出G(j)
input
多组测试数据,对于每组测试数据包含三个正整数,i,G(i),j。1<=i,j<=20,G(i)<100000
output
对于每组数据,如果t存在输出对应的G(j)的值,否则输出-1。
sample input
1 1 2
3 5 4
3 4 6
12 17801 19
sample output
2
8
-1
516847