一些有趣的數學問題java程式設計實現
阿新 • • 發佈:2019-02-05
一、斐波那契數列
//斐波那契數列
//該數列從第三個數字開始,每個數字都是前兩個數字的和;
public static long[] fibonacci(long n1, long n2, int n)
{
long[] l = new long[n];
l[0] = n1;
l[1] = n2;
for(int i=2;i<n;i++)
{
l[i] = l[i-2] + l[i-1];
}
return l;
}
二、吸血鬼數字
//吸血鬼數字;吸血鬼數字是這樣一類數字,該數字可以由兩個數字乘積得到,
//條件1:吸血鬼數字必須是偶數位;
//條件2:兩個乘數的位數都是吸血鬼數字的位數的一半;
//條件3:吸血鬼數字的所有位的數字構成的集合完全與兩個乘數的所有位數字構成的集合相同;
//條件4:吸血鬼數字不能以00結尾;
public static long[] bloodsuckerfiger(int n)
{
if(n%2 > 0)
{
return new long[0];
}
List<Long> list = new ArrayList<Long>();
long min = 1;
for(int i=0;i<n-1;i++)
{
min *= 10;
}
long max = 1;
for(int i=0;i<n;i++)
{
max *= 10;
}
int m = n/2;
long min1 = 1;
for(int i=0;i<m-1;i++)
{
min1 *= 10;
}
long max1 =1;
for(int i=0;i<m;i++)
{
max1 *= 10;
}
for(long l=min1;l>=min1&&l<max1/2;l++)
{
String s1 = Long.valueOf(l).toString();
List<String> l1 = new ArrayList<String>();
for(int i =0;i<s1.length();i++)
{
l1.add(s1.substring(i, i+1));
}
for(long g=max1/2;g>=max1/2&&g<max1;g++)
{
String s2 = Long.valueOf(g).toString();
List<String> l2 = new ArrayList<String>();
for(int i=0;i<s2.length();i++)
{
l2.add(s2.substring(i, i+1));
}
long r = l*g;
String s3 = Long.valueOf(r).toString();
List<String> l3 = new ArrayList<String>();
for(int i=0;i<s3.length();i++)
{
l3.add(s3.substring(i, i+1));
}
if(r%100>0&&r>min&&r<max)
{
List<String> ll = new ArrayList<String>();
ll.addAll(l1);
ll.addAll(l2);
List<String> ll1 = new ArrayList<String>();
List<String> ll2 = new ArrayList<String>();
ll1.addAll(ll);
ll2.addAll(l3);
for(String ss1:ll)
{
for(String ss2:l3)
{
if(ss1.equals(ss2))
{
ll1.remove(ss1);
ll2.remove(ss2);
break;
}
}
}
if(ll1.size() == 0 && ll2.size() == 0)
{
System.out.println(l+" "+g+" "+r);
list.add(r);
}
}
}
}
long[] result = new long[list.size()];
for(int i=0;i<list.size();i++)
{
result[i] = list.get(i);
}
return result;
}
//斐波那契數列
//該數列從第三個數字開始,每個數字都是前兩個數字的和;
public static long[] fibonacci(long n1, long n2, int n)
{
long[] l = new long[n];
l[0] = n1;
l[1] = n2;
for(int i=2;i<n;i++)
{
l[i] = l[i-2] + l[i-1];
}
return l;
}
二、吸血鬼數字
//吸血鬼數字;吸血鬼數字是這樣一類數字,該數字可以由兩個數字乘積得到,
//條件1:吸血鬼數字必須是偶數位;
//條件2:兩個乘數的位數都是吸血鬼數字的位數的一半;
//條件3:吸血鬼數字的所有位的數字構成的集合完全與兩個乘數的所有位數字構成的集合相同;
//條件4:吸血鬼數字不能以00結尾;
public static long[] bloodsuckerfiger(int n)
{
if(n%2 > 0)
{
return new long[0];
}
List<Long> list = new ArrayList<Long>();
long min = 1;
for(int i=0;i<n-1;i++)
{
min *= 10;
}
long max = 1;
for(int i=0;i<n;i++)
{
max *= 10;
}
int m = n/2;
long min1 = 1;
for(int i=0;i<m-1;i++)
{
min1 *= 10;
}
long max1 =1;
for(int i=0;i<m;i++)
{
max1 *= 10;
}
for(long l=min1;l>=min1&&l<max1/2;l++)
{
String s1 = Long.valueOf(l).toString();
List<String> l1 = new ArrayList<String>();
for(int i =0;i<s1.length();i++)
{
l1.add(s1.substring(i, i+1));
}
for(long g=max1/2;g>=max1/2&&g<max1;g++)
{
String s2 = Long.valueOf(g).toString();
List<String> l2 = new ArrayList<String>();
for(int i=0;i<s2.length();i++)
{
l2.add(s2.substring(i, i+1));
}
long r = l*g;
String s3 = Long.valueOf(r).toString();
List<String> l3 = new ArrayList<String>();
for(int i=0;i<s3.length();i++)
{
l3.add(s3.substring(i, i+1));
}
if(r%100>0&&r>min&&r<max)
{
List<String> ll = new ArrayList<String>();
ll.addAll(l1);
ll.addAll(l2);
List<String> ll1 = new ArrayList<String>();
List<String> ll2 = new ArrayList<String>();
ll1.addAll(ll);
ll2.addAll(l3);
for(String ss1:ll)
{
for(String ss2:l3)
{
if(ss1.equals(ss2))
{
ll1.remove(ss1);
ll2.remove(ss2);
break;
}
}
}
if(ll1.size() == 0 && ll2.size() == 0)
{
System.out.println(l+" "+g+" "+r);
list.add(r);
}
}
}
}
long[] result = new long[list.size()];
for(int i=0;i<list.size();i++)
{
result[i] = list.get(i);
}
return result;
}