基础面试(1):JAVA经典题目及答案(前30)

【程序 1

 

题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

 

1.程序分析: 兔子的规律为数列 1,1,2,3,5,8,13,21....

 

// 兔子问题--抓住第n个月的总数为前两个月总数的和

public void rabbit() {

int sum = 0;

int month = 1;

int temp1 = 1;// 前第一个月

int temp2 = 1;// 前第二个月

Scanner scan = new Scanner(System.in);

System.out.print("请输入第几个月:");

month = scan.nextInt();

for (int i = 1; i <= month; i++) {

if (i <= 2) {

sum = 1;

} else {

sum = temp1 + temp2;

temp1 = temp2;

temp2 = sum;

 

}

}

System.out.println("第" + month + "个月兔子总数:" + sum);

}

【程序 2

 

题目:判断 101-200 之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

// 质数--抓住质数的特点(只能被1和它本身整除的数)

public void prime() {

int c = 0;

System.out.print("素数有:");

for (int i = 101; i <= 200; i++) {

for (int j = 2; j <= i; j++) {

if (i % j == 0 && i == j) {

c++;

System.out.print(i + ",");

} else if (i % j == 0 && i != j)

break;

}

}

System.out.println("101-200 之间有:" + c + "个素数");

}

【程序 3

题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个 "水仙花数 ",因为 153=1 的三次方+5 的三次方+3 的三次方。

 

1.程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。 

 

// 水仙花数--特点(一个三位数,其各位数的立方和等于它本身的值。分解值的个位、十位和百位)

// @Test

public void daffodil() {

int i, j = 0, k;

 

int bai, shi, ge;

 

for (i = 100; i < 1000; i++) {

bai = i / 100;// 求百位数

 

shi = (i / 10) % 10;// 求十位数

 

ge = (i % 100) % 10;// 求个位数

 

k = bai * bai * bai + shi * shi * shi + ge * ge * ge;

if (i == k) {

 

System.out.println(i);

 

j++;

 

}

 

}

 

System.out.println("符合条件的水仙花数为:" + j);

}

 

【程序 4

 

题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5

 

程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:

 

(1)如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。

 

(2)如果 n <> k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数你 n,重复执行第一步。

 

(3)如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。 

// 质因数--

@Test

public void primeFactors() {

Scanner scan = new Scanner(System.in);

System.out.println("请输入一个数:");

int b = scan.nextInt();

int a = b; //保存原数

int age[] = new int[50];

int j=0;

for(int i=2;b!=1;){

if(b%i==0){

b = b/i;

age[j] = i;

j++;

}else{

i++;

}

}

System.out.println(a+"=");

for(int i=0;i<j;i++){

System.out.print(age[i]);

if(i<j-1){

System.out.print("*");

}

}

}

 

【程序 5

 

题目:利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示。

 

1.程序分析:(a> b)?a:b 这是条件运算符的基本例子。

//三目运算嵌套

@Test

public void ternary(){

Scanner s = new Scanner(System.in);

System.out.println("请输入一个分数");

int score = s.nextInt();

String str =score>89==true?"A":(score<60==true?"C":"B");

System.out.println("该分数是:"+str);

}

 

【程序 6

 

题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。

 

1.程序分析:利用辗除法。 import java.util.Scanner; public class timu6 {

 

public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a, b;

 

System.out.println("请输入两个整数:"); a = sc.nextInt();

 

b = sc.nextInt();

 

System.out.println("您输入的数是:" + a + "  " + b); int age[] = new int[(a + b) / 2];

 

int j = 0;

 

for (int i = 1; i < (a + b) / 2; i++) { if (a % i == 0 && b % i == 0) {

 

age[j] = i; j++;

 

}

 

}

 

System.out.println("最大公约数是:" + age[--j]); for (int k = 1; k < 100000; k++) {

if (k % a == 0 && k % b == 0) { System.out.println("最小公倍数是:" + k); break;

 

}

 

}

 

}

 

}

 

【程序 7

 

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.程序分析:利用 while 语句,条件为输入的字符不为 '\n '.

//识别字符的类别--Character类用于识别字符类型

@Test

public void judge(){

Scanner s = new Scanner(System.in);

System.out.println("请输入一串字符:");

String str = s.nextLine();

char[] sca = str.toCharArray();

int numberCount = 0;

int letterCount = 0;

int spaceCount = 0;

int otherCount = 0;

for(int i=0;i<sca.length;i++){

if(Character.isLetter(sca[i])){

letterCount++;

}else if(Character.isSpaceChar(sca[i])){

spaceCount++;

}else if(Character.isDigit(sca[i])){

numberCount++;

}else{

otherCount++;

}

}

}

 

【程序 8

 

题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(

 

时共有 5 个数相加),几个数相加有键盘控制。

 

1.程序分析:关键是计算出每一项的值。 

 

public void calc(){

Scanner s = new Scanner(System.in);

System.out.println("请输入多少个a相加");

int i = s.nextInt();//加到几位数

int a = s.nextInt();//

int b = a; //保留原数

int sum = 0;

for(int j=1;j<=i;j++){

sum += a;

System.out.print(a);

if(j!=i-1){

System.out.print("+");

}

a = a*10+b; //后一个数等于前一个数*10+原数a

}

System.out.print("="+sum);

}

 

 

 

 

【程序 9

 

题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如 6=123.编程

 

找出 1000 以内的所有完数。

解题思路:完数注意点(1.首先相加的数能被它整除;2.被它整除的数相加之和与它相等;3.不包括它自身)

 

public class timu9 {

 

public static void main(String[] args) {

 

int sum = 0;

 

for (int i = 1; i <= 1000; i++) {

 

int a = 0;

 

for (int j = 1; j < i; j++) {

 

if (i % j == 0)

 

a += j;

 

}

 

if (a == i) {

 

System.out.println(a);

 

sum++;

 

}

 

}

 

System.out.println("共有完数:" + sum);

 

}

 

}

 

【程序 10

 

题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第

 

10 次落地时,共经过多少米?第 10 次反弹多高?

 

 

Scanner s = new Scanner(System.in);

 

System.out.println("想求第几次反弹的高度:");

int n = s.nextInt();

double h = 100; //原高度

double sum =100;

for(int i=1;i<=n;i++){

h = h/2;

sum += 2*h;

if(i==n){

sum -= 2*h;

}

}

System.out.println("第"+n+"次落地经过的总高度是"+sum);

System.out.println("第"+n+"次反弹高度是"+h);

 

【程序 11】有1,2,3,4几个数字,能组成多少个不互不相同且无重复数字三位数,都是多少?

程序分析: 这几个均可填在百位、十位、个位,并且不互不相同且无重复数字三位数

int[] arr = {1,2,3,4};

int sum = 0;

int number = 0;

for(int i=0;i<4;i++){

sum=0;

sum += arr[i]*100;

 

for(int j=0;j<4;j++){

if(arr[i]==arr[j]){

continue;

}else{

sum += arr[j]*10;

 

for(int k=0;k<4;k++){

if(arr[k]==arr[i] || arr[k]==arr[j]){

continue;

}else{

sum+=arr[k];

number++;

System.out.println("组成的互不相同且无重复数字的三位数有:"+sum);

}

 

}

}

}

}

System.out.println("共有三位数"+number);

 

【程序 12

 

 

 

public void bonus(){

Scanner scan = new Scanner(System.in);

double profit = scan.nextLong();

double bonus = 0;

double b = profit;

if(b<=100000){

bonus = b*0.1;

}else if(b<=200000){

bonus = 100000*0.1+(b-100000)*0.075;

}else if(b<=400000){

bonus = 100000*0.1+100000*0.075+(b-200000)*0.05;

}else if(b<=600000){

bonus = 100000*0.1+100000*0.075+200000*0.05+(b-400000)*0.03;

}else if(b<=1000000){

bonus = 100000*0.1+100000*0.075+200000*0.05+200000*0.03+(b-600000)*0.015;

}else{

bonus = 100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(b-1000000)*0.01;

}

System.out.println("当利润是"+b+"时,奖金是:"+bonus);

}

 

 

【程序 13

 

int a=1;

for(int i=0;i<100000;i++){

a++;

for(int j=1;j<a+100;j++){

if(Math.sqrt(a+100)==j){

for(int k=1;k<a+268;k++){

if(Math.sqrt(a+268)==k){

System.out.println("这个数是:"+a);

}

}

}

}

}

 

【程序 14

某年某月某日是本年中的第几天--计算的月份要少一月,闰年,单双月

程序分析:也可用switch来做

public void decide(){

Scanner scan = new Scanner(System.in);

System.out.print("请输入年份:");

int y = scan.nextInt();

System.out.print("请输入月份:");

int m = scan.nextInt();

System.out.print("请输入号数:");

int d = scan.nextInt();

System.out.println("输入的日期是:"+y+"年"+m+"月"+d+"日");

 

int n = d;//第n天

boolean tag = ((y%4==0&&y%100!=0) ||y%400==0)==true?true:false;

 

for(int i=1;i<m;i++){

if(i<=7){

if(i==2){

n += tag==true?29:28;

}else{

n += (i%2==0)==true?30:31;

}

}else{

n += (i%2==0)==true?31:30;

}

}

System.out.println("这是"+y+"的第"+n+"天");

}

 

 

【程序 15

输入x,y,z三个数,从小到大输出。

程序分析:交换、冒泡

Scanner scan = new Scanner(System.in);

System.out.print("请输入三个数:");

int y = scan.nextInt(); //最小值

int m = scan.nextInt();

int d = scan.nextInt();

int temp;

//System.out.println("输入的三个数是:"+y+","+m+","+d);

if(y>m){

  temp = y;

  y = m;

  m = temp;

}

if(y>d){

  temp = d;

  d = y;

  y = temp;

}

if(m>d){

  temp = d;

  d = m;

  m = temp;

}

 

System.out.println("三个数从小到大分别是:"+y+","+m+","+d);

 

【程序 16

输出9*9口诀

程序分析:i,j相等时输出

public void test1(){

for(int i=1;i<=9;i++){

for(int j=i;j<=9;j++){

if(j==i){

System.out.println(i+"*"+j+"="+i*j);

}else{

continue;

}

}

}

}

 

【程序 17

 

public void monkeyEat(){

int b = 1;//每天桃子的总数

int c = 0;

for(int i=9;i>0;i--){

b = (b+1)*2;

c = b/2+1;

System.out.print("第"+i+"天共摘了"+b+"个桃子");

System.out.print("第"+i+"共吃了"+c+"个桃子");

System.out.println( );

}

 

}

 

【程序 18

 

程序分析:前四行一个规律,后三行一个规律。用双重for循环,外层控制行,内层控制列。

int m=-2;

for(int i=0;i<7;i++){

if(i<4){

if(i%2==0){

m = m+3;

}else{

m = m+2;

}

}else{

if(i%2==0){

m = m-2;

}else{

m = m-3;

}

}

for(int j=1;j<=m;j++){

System.out.print("*");

}

System.out.println();

}

 

 

【程序 19

 

public void getSum(){

double sum=0;//20项之和

double fz =2;//分子

double fm = 1;//分母

double temp;

System.out.println("前20项和:");

for(int i=1;i<=20;i++){

System.out.print(fz+"/"+fm);

sum+=fz/fm;

temp = fz+fm;

fm = fz;

fz = temp;

if(i!=20){

System.out.print("+");

}

}

System.out.println("="+sum);

}

 

【程序 20】

 

 

public void factorial(){

int sum = 0;

for(int i=1;i<=3;i++){

int s =1;

for(int j=1;j<=i;j++){

s=s*j;

}

sum+=s;

}

System.out.println(sum);

}

 

【程序 21】

 

 

@Test

public void factorial1(){

System.out.println("5的阶乘:"+recursion(5));

}

 

//递归算法

public double recursion(int n){

if(n==1) return 1;

return recursion(n-1)*n;

}

 

【程序 22】

public void age(){

int age = 10;

for(int i=1;i<5;i++){

age = age+2;

}

System.out.println(age);

}

 

【程序 23】

 

程序分析:比较法或number/1000!=0来判断位数

public void orderPrint(){

Scanner scan = new Scanner(System.in);

System.out.print("请输入一个不大于10000的正整数:");

int number = scan.nextInt();

int ge =0;

int shi=0;

int bai=0;

int qian=0;

if(number>10000 || number<0){

System.out.println("number不能大于10000且不能小于0,请重新输入:");

number = scan.nextInt();

}

if(number>1000){

System.out.println(number+"是四位数");

qian = number/1000;

bai = (number%1000)/100;

shi = ((number%1000)%100)/10;

ge = number%10;

System.out.println(number+"逆向打印:"+ge+","+shi+","+bai+","+qian);

}else if(number>100){

System.out.println(number+"是三位数");

bai = (number%1000)/100;

shi = ((number%1000)%100)/10;

ge = number%10;

System.out.println(number+"逆向打印:"+ge+","+shi+","+bai);

}else if(number>10){

System.out.println(number+"是二位数");

shi = ((number%1000)%100)/10;

ge = number%10;

System.out.println(number+"逆向打印:"+ge+","+shi);

}else{

System.out.println(number+"是一位数");

ge = number%10;

System.out.println(number+"逆序打印:"+ge);

}

 

}

 

【程序 24】

 

public void palindrome(){

Scanner scan = new Scanner(System.in);

System.out.print("请输入一个5位数:");

int aa = scan.nextInt();

if(aa/10000==0){

System.out.println("输入错误,请重新输入");

aa = scan.nextInt();

}

int ge = aa%10;

int wan = aa/10000;

int shi = ((aa%10000)%1000)%100/10;

int qian = (aa%10000)/1000;

if(ge==wan && shi==qian){

System.out.println(aa+"是回文数");

}

}

 

【程序 25】

 

public void weekday(){

Scanner scan = new Scanner(System.in);

System.out.print("请输入一个星期首字母:");

String aa = scan.next();

String a ="" ;

String sa = "";

//利用switch结构性执行下一个带有break语句的case分支,以实现忽略用户控制台输入大小写敏感

switch(aa){

case "m":

case "M": a = "星期一";

break;

case "w":

case "W": a = "星期三";

break;

 

case "f":

case "F": a = "星期五";

break;

case "t":

case "T":System.out.println("请输入第二个字母:");

sa = scan.next();

a = (sa.equalsIgnoreCase("h")==true)?"星期四":"星期二";

break;

case "s":

case "S":System.out.println("请输入第二个字母:");

sa = scan.next();

a = (sa.equalsIgnoreCase("a")==true)?"星期六":"星期天";

break;

default:a ="输入错误!";

}

System.out.println("输入的是:"+a);

}

 

【程序 26】

求100以内的素数

1.程序分析:素数是只能被1和本身整除的数

public void prime1(){

int sum=0;

System.out.println("100以内的素数有:");

for(int i=2;i<=100;i++){

for(int j=2;j<=i;j++){

if(i%j==0 && i==j){

sum++;

System.out.print(i);

System.out.print(",");

}else if(i%j==0 && i!=j){

break;

}

}

}

System.out.println();

System.out.println("100以内的素数共有:"+sum+"个");

}

【程序 27】

对10个数进行排序

1.程序分析:冒泡法。前后数据相比较交换,每轮选出一个最大值。

 

public void bubble(){

Scanner scan = new Scanner(System.in);

System.out.print("请输入十个正整数:");

int arr[] = new int[10];

int temp;//用于交换

for(int m =0;m<10;m++){

arr[m] = scan.nextInt();

}

 

for(int i=0;i<9;i++){

for(int j=0;j<9-i;j++){

if(arr[j]<arr[j+1]){

temp = arr[j+1];

arr[j+1] = arr[j];

arr[j] = temp;

}

}

}

 

for(int i=0;i<10;i++){

System.out.print(arr[i]);

if(i!=9){

System.out.print(",");

}

}

 

}

 

 

【程序 28】

求一个3*3矩阵对角线元素之和

1、程序分析:将行与列下标相等的数相加

public void  matrix(){

int arr[][] = new int[3][3];

int sum = 0;

int sum1 = 0;

Scanner scan = new Scanner(System.in);

System.out.println("请输入一个3*3矩阵:");

for(int i=0;i<3;i++){

for(int j=0;j<3;j++){

arr[i][j] = scan.nextInt();

System.out.print(arr[i][j]+" ");

if(i==j){

sum+=arr[i][j];

}

if(i+j==2){

sum1+=arr[i][j];

}

}

System.out.println( );

}

System.out.println("两条对角线之和分别是:"+sum+","+sum1);

}

 

【程序 29】一个数组逆序输出

1、思路:逆向循环遍历

 

【程序 30】取一个整数a从右端开始的4~7位

1、思路:

public void cutOut(){

int a=0;

Scanner sc=new Scanner(System.in);

System.out.print("请输入一个至少7位的整数:");

long b=sc.nextLong();

if(b<1000000){//b%1000000==0

   System.out.println("输入整数小于7位!!");

}else{

   a=(int) Math.floor(b % Math.pow(10,7)/Math.pow(10, 3));

   System.out.println(a);

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值