您的位置:首页 > 编程语言 > Java开发

Java 基础10道数学题的解法

2018-03-24 23:38 681 查看
1.题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(数字关系不清楚请自查斐波那契数列)
//费波纳列数列,前两位是1,之后没位数是前两位数的和
private static void fibonacci(int n) {
int temp1=1,temp2=1,temp;
System.out.print(temp1+","+temp2);
for (int i = 1; i <=n ; i++) {
temp=temp1+temp2;
System.out.print(","+temp);
temp1=temp2;
temp2=temp;
}
System.out.println();
}
//费波纳捏递归
public static int fibonacci1(int month){
if (month<0) return -1;
if(month<3&&month>=0) return 1;
return fibonacci1(month-1)+ fibonacci1(month-2);
}
2.题目:判断101-200之间有多少个素数,并输出所有素数。
private static void find1() {
outer:
for (int i = 100; i <= 200; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0) continue outer;
}
System.out.print(i + "\t");
}
System.out.println();
}

private static void find2() {
Boolean flag = false;
for (int i = 100; i <= 200; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;//判为非质数
break;
}
//如果j循环到i都没有break,那么这个i是一个质数
flag = true;
}
if (flag) System.out.print(i + "\t");
}
}

//判断是否是质数
private static boolean isPrimer(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) return false;
}
re
4000
turn true;
}
3.题目:打印出所有的"水仙花数(narcissus number)",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
public static void narcissus() {
int number = 0;
for (int a = 1; a < 10; a++) {
for (int b = 0; b < 10; b++) {
for (int c = 0; c < 10; c++) {
if ((number = (a * 100 + b * 10 + c)) == (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3))) {
System.out.println(number);
}

}
}
}
}

4.题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
private static void showPrimerFactor(int n) {
System.out.print(n + "=");
int count = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
count++;
System.out.print(((count == 1) ? "" : "*") + i);
n = n / i;
i=1;
continue;
}
}
System.out.println();
}
5.题目:打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
private static void showYangHui(int n) {
int[][] yang = new int

;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
yang[i][j] = (j == 0 || j == i) ? 1 : yang[i - 1][j - 1] + yang[i - 1][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(yang[i][j] + " ");
}
System.out.println();
}
}

6.题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
private static void showGCD(int x, int y) {
int maxGY = 1;
int minGB ;
for (int i = 1; i < ((x > y) ? x : y); i++) {
if (x % i == 0 && y % i == 0) {
maxGY *= i;
x/=i;y/=i;
i=1;
}
}
minGB=x*y*maxGY;
System.out.println(maxGY+","+minGB);
}

7.题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
public void findNumber(int n) {
for (int i = 0; i < n; i++) {
if (isSquare(i+100)&&isSquare(i+168)) System.out.println(i);
}
}
private boolean isSquare(int n){
int temp=(int)Math.pow(n, 0.5);
return temp * temp == n;
}

8.题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
private static void showNumbers(String info) {
int countA = 0, countS = 0, countD = 0, countO = 0;
int length = info.length();
String temp;
for (int i = 0; i < length; i++) {
temp = info.charAt(i) + "";
if (temp.matches("[a-zA-Z]")) {
countA++;
} else if (temp.matches("\\s")) {
countS++;
} else if (temp.matches("\\d")) {
countD++;
} else countO++;
}
System.out.println("字母" + countA + "空格" + countS + "数字" + countD + "其他" + countO);
}
9.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a=2;
System.out.println(add(a,n));
}

private static int add(int a,int n) {
if (n==1) return a;
return a*(int)Math.pow(10, n-1)+a*add(a, n-1);
}
10.题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的四位数?都是多少?
public class demo {
public static void main(String[] args) {
int a = 1, b = 2, c = 3, d = 4, count = 0;
for (int i = a; i <= d; i++) {
for (int j = a; j <= d; j++) {
for (int k = a; k <= d; k++) {
if (i == j || j == k || i == k) continue;
System.out.println(i * 100 + j * 10 + k);
count++;
}
}
}
System.out.println("共有:" + count + "个");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: