import java.util.Scanner; /** * @author febis * @create 2016-10-03 */ public class BasicKnowlenge { /* 1、编写一个Java程序在屏幕上输出“Hello World!”。 */ public static String printHello(){ return "Hello World"; } /* 方法二:直接打印,不返回参数 */ public static void printHello2(){ System.out.println("Hello World"); } /* 2、编写一个Java程序,用if-else语句判断某年份是否为闰年。 思路:闰年的情况:能被4整除并且能被100整除或者能被400整除 步骤:用if-else判断,需要逻辑运算符 */ public static String ifRun(int year){ if(year % 4 == 0 && year % 100 ==0 ||year % 400 == 0) { return "是闰年"; }else{ return "不是闰年"; } } /* 3、编写一个Java程序在屏幕上输出1!+2!+3!+……+10!的和。 思路:首先考虑用哪种数据类型,使用for循环进行阶乘 步骤:目测上述数字不超过int范围,先设变量存和,再设一个变量存储每个阶乘的值。 */ public static int jieCheng(int max){ int sum = 0; // 因为作用域的原因,不能放在for循环里面 for(int x = 1 ;x<=max;x++){ int m = x; //不能直接带入x进行运算 for(int y = 1;y<x;y++){ m*=y; } sum +=m; } return sum; } /* 4、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到 第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 思路:这是一个菲波拉契数列问题 步骤:每一项等于前两项的和 */ public static void fei(int month){ int f1=1; //表示上一月兔子数量 int f2=1; //表示当月兔子的数量 System.out.println("第一个月兔子总数为:"+ f2 +"对"); System.out.println("第二个月兔子总数为:"+ f2 +"对"); for(int x=3;x<=month;x++){ int f = f2; //当前月作为下次计算的前一个月 f2 = f1+f2; f1 = f; System.out.println("第"+ x +" 个月兔子总数为:"+ f2 +"对"); } } /* 5、判断101-200之间有多少个素数,并输出所有素数。 思路:素数:除了一个本身,不能被其他数整除 步骤:从101~本身进行整除,设两个变量,一个计数一个判断,当然,可以进行优化以减少运算次数。 */ public static void numofSushu(){ int num = 0 ; // 作为素数个数标识 for(int x=101;x<=200;x+=2){ // x+=2 偶数肯定不行 boolean boo = false; // 设置标识,如果是素数则为true for(int y=2;y<Math.sqrt(x);y++){ //只需要算到x的平方根就可以 if(x%y==0){ boo = false; break; }else { boo = true; } } if(boo ==true){ num+=1; } } System.out.println("101~200之间素数的个数为:"+ num); } /* 6、打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 思路:将各个数拆分平方计算求和 步骤:先将三位数拆开再计算 */ public static void flower(){ int a,b,c; for(int x=100;x<=999;x++){ a = x/100; //百位数 b = x/10%10; //十位数 c = x%10; //个位数 if(a*a*a+b*b*b+c*c*c==x){ System.out.print(x+" "); } } System.out.println(); } /* 7、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 思路:每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做分解质因数。 步骤:(1)找给出的数的最小质数,如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n > k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 */ public static void fenJie(int x){ String str = null; //作为分解因式后面的字符串 int min = 2; // 设置最小的质数为2 System.out.print(x + "="); while(min<=x){ if(min == x){ //步骤1 System.out.println(x); break; }else if(x%min == 0){ //步骤2 System.out.print(min+ "*"); x = x/min; }else{ //步骤3 min++; } } } /* 8、利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示, 60-89分之间的用B表示,60分以下的用C表示。 思路:使用if判断分数是否符合条件,再用switch判断属于哪一个分段 */ public static void grade(int x){ int y = x/10; if(x>=0 && x<=100) { switch (y) { case 9:case 10: System.out.println("该同学分数为A"); break; case 6: case 7: case 8: System.out.println("该同学分数为B"); break; default: System.out.println("该同学分数为C"); break; } }else{ System.out.println("分数不符合规范"); } } //方法二:使用三元判断 public static void grade2(int x){ char live ; if(x>=0 && x<=100){ live = x>90 ? 'A':x>60?'B':'C'; System.out.println("该同学分数为"+live); }else{ System.out.println("分数不符合规则"); } } /* 9、输入两个正整数m和n,求其最大公约数和最小公倍数。 思路:在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数, 取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数, 此数即为最大公约数,最小公倍数为两数之积除以最大公约数 */ public static int deff(int a, int b){ if(a>b){ //将a转变成小的数,b为大的数 int x = b; b=a; a=x; } while(a!=0){ if(a ==b){ return b; }else{ int k = b%a; b=a; a=k; } } return b; } /* 10、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 思路:先接收一个字符串,然后将字符串的每一项放入一个字符数组,分开统计得出结果。使用循环嵌套 步骤:先定个几个变量用于存储各字符的数量,接收字符,分解字符,判断字符。 */ public static void charType(String str){ int digital = 0; int character = 0; int blank = 0; int other = 0; char[] ch = str.toCharArray(); //tocharArray()方法是将字符串分解 // for(int x=0;x<ch.length;x++){ // if(ch[x]>='0' && ch[x]<='9'){ // digital++; // }else if (ch[x]>='A' && ch[x]<='z'){ // //因为大写与小写字符是相连的,所以不用:(ch[x]>='a' && ch[x]<='z')||(ch[x]>='A' && ch[x]<='Z') // //大写编码在前,小写在后 // character++; // }else if(ch[x] == ' '){ // blank++; // }else { // other++; // } // } for(int x=0;x<ch.length;x++){ //m是无效变量 int m = ch[x]>='0' && ch[x]<='9' ? digital++:ch[x]>='A' && ch[x]<='z'?character++:ch[x] == ' '? blank++:other++; } System.out.println("英文字符个数为:" + character); System.out.println("数字字符个数为:" + digital); System.out.println("空格字符个数为:" + blank); System.out.println("其他字符个数为:" + other); } public static void main(String[] args){ //1. System.out.println("第一题---------------------"); String str = printHello(); //方法返回一个String字符串,需要建变量接收才能再打印 System.out.println(str); printHello2(); //2. System.out.println("第二题---------------------"); int year = 2010; System.out.println(year + ifRun(year)); //3. System.out.println("第三题---------------------"); int cheng = jieCheng(4); System.out.println(cheng); //4. System.out.println("第四题---------------------"); fei(10); //5. System.out.println("第五题---------------------"); numofSushu(); //6. System.out.println("第六题---------------------"); flower(); //7. System.out.println("第七题---------------------"); System.out.print("请输入一个正整数:"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); fenJie(num); //8. System.out.println("第八题---------------------"); System.out.print("方法1:请输入一个分数:"); int fenshu = sc.nextInt(); grade(fenshu); //方法2 System.out.print("方法2:请输入一个分数:"); int fenshu2 = sc.nextInt(); grade2(fenshu2); //9. System.out.println("第九题---------------------"); System.out.print("请输入两个个正整数:"); int m = sc.nextInt(); int n = sc.nextInt(); int max = deff(m,n); int min = m*n/max; System.out.println("两数最大公约数为:" +max); System.out.println("两数最小公倍数为:" +min); //10. System.out.println("第十题---------------------"); System.out.println("请输入一个字符串:"); String str2 = sc.nextLine(); //nextLine()方法接收空格 charType(str2); } }
Java编程基本功训练题(1~10)
最新推荐文章于 2023-02-08 20:09:37 发布