JAVA基础编程练习自我总结
程序员文章站
2022-06-30 20:48:20
...
文章目录
初学java,每天码一码代码。
- 斐波那契数列1,1,2,3,5,8,…。求第40个数。
【思路】递归
【代码】
public class Test1 {
public static void main(String[] args) {
System.out.println("斐波那契数列1,1,2,3,5,8,...,求第40个数。");
long num = factorial(40);
System.out.println(num);
}
//递归
static long factorial(long count){
long num = 0;
if(count==2||count==1){ //递归头
return 1;
}else{ //递归体
return num = factorial(count-1)+factorial(count-2);
}
}
}
【输出结果】
- 判断101-200间的整数有多少个素数,并输出这些素数
【思路】嵌套循环求数的因子数,如果求得因子数量为2个(1和自身),则为质数。
【代码】
public class Test2 {
public static void main(String[] args) {
System.out.println("判断101-200间的整数中有多少个素数,并输出这些数。");
int num = 0;
for(int i=101;i<200;i+=2){ //遍历101-200的所有数,已知偶数均不是素数,故可减少计算量
int count = 0; //记录当前数的因子个数
for(int j=1;j<=i;j++){ //在[1,i]的整数范围内寻找当前数的因子j
if(i%j==0){ //如果i/j为整数,则j为i的一个因子,计数+1
count+=1;
}
}
if(count==2){ //当且仅当计数为2时,表示当前数只有1和本身两个因子,即为素数
System.out.print(i+"\t");
num++;
}
}
System.out.println("\n则101-200内的整数中有"+num+"个素数");
}
}
【输出结果】
- 打印出所有的"水仙花数"。所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
【思路】(1)遍历100-999的整数,分别提取当前数的个位、十位、百位数字,按定义计算。(2)或嵌套循环
【代码】(1)
public class Test3_1 {
public static void main(String[] args) {
System.out.println("求所有水仙花数,并输出。水仙花数如153=1^3+5^3+3^3。");
long startTime = System.currentTimeMillis();
int gw,sw,bw;
for(int i=100;i<1000;i++){
bw = i/100;
sw = i%100/10;
gw = i%10;
if(bw*bw*bw+sw*sw*sw+gw*gw*gw==i){
System.out.print(i+"\t");
}
}
long endTime = System.currentTimeMillis();
System.out.println("\nExecute time:" +(endTime-startTime)+"ms");
}
}
【输出结果】
【代码2】
public class Test3_2 {
public static void main(String[] args) {
System.out.println("求所有水仙花数,并输出。水仙花数如153=1^3+5^3+3^3。");
long startTime = System.currentTimeMillis();
for(int bw=1;bw<=9;bw++){
for(int sw=0;sw<=9;sw++){
for(int gw=0;gw<=9;gw++){
if(bw*bw*bw+sw*sw*sw+gw*gw*gw==bw*100+sw*10+gw){
System.out.print((bw*100+sw*10+gw)+"\t");
}
}
}
}
long endTime = System.currentTimeMillis();
System.out.println("\nExecute time:" +(endTime-startTime)+"ms");
}
}
【输出结果】
- 将一个正整数分解质因数。例如:输入90,打印出90=233*5。
【思路】
(1)如果这个质数恰等于n,则说明分解质因数的过程已结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
【代码】
import java.util.Scanner;
public class Test4{
public static void main(String[] args) {
System.out.println("将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。");
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个大于1的正整数:");
int num = sc.nextInt();
System.out.print(num+"=");
int i = 2;
diff(num,i);
}
static void diff(int num, int i){
while(i!=num){
if(num%i==0){
num/=i;
System.out.print(i+"*");
}else{
i++;
}
}
if(num==i){
System.out.print(i);
}
}
}
【输出结果】
- 输入两个正整数m和n,求其最大公约数和最小公倍数。
【思路】循环:每一轮用大数除以小数,得到余数。将上一轮的小数作为本轮循环的大数,上一轮的余数作为本轮的小数,直到某一轮的小数为0,输出这一轮的大数,即为两数的最大公约数。而最小公倍数等于两数之积除以最大公约数。
【代码】
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个正整数,以回车键结束");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int temp = 0;
int yushu,minGYS,maxGBS;
if(num1<num2){ //保证第一个数是大数
temp = num1;
num1 = num2;
num2 = temp;
}
minGYS = diff(num1,num2);
maxGBS = num1*num2/minGYS;
System.out.print(",最小公倍数为"+maxGBS);
}
static int diff(int x, int y){
int yushu =0;
while(y!=0){
yushu = x%y;
x = y;
y = yushu;
}
if(y==0) {
System.out.print("两数的最大公因数为"+x);
}
return x;
}
}
【输出结果】
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一段字符串(以回车结束):");
String str = sc.nextLine();
char[] ch = null;
int numDigit=0, numCharacter=0, numSpace=0, numOthers=0;
ch = str.toCharArray();
for(int i=0;i<ch.length;i++){
if(ch[i]>='0'&&ch[i]<='9'){
numDigit++;
}else if(ch[i]>='a'&&ch[i]<='z'||ch[i]>='A'&&ch[i]<='Z'){
numCharacter++;
}else if(ch[i]==' '){
numSpace++;
}else{
numOthers++;
}
}
System.out.println("这段字符串中有"+numDigit+"个数字,"+numCharacter+"个英文字母,"+numSpace+"个空格,"+numOthers+"个其他字符。");
}
}
【输出结果】
- 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),数字与几个数相加均由键盘输入。
【代码】
import java.util.Scanner;
public class Test7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个1-9间的整数:");
int num = sc.nextInt();
System.out.print("请输入加数的个数(请勿过多):");
int count = sc.nextInt();
long sum = add(num,count);
System.out.print(sum);
}
static long add(int x,int y){
long s = x;
int gw = x;
System.out.print(x);
for(int i=1;i<y;i++){
x = x+gw*(int)Math.pow(10,i);
System.out.print("+"+x);
s += x;
}
System.out.print("=");
return s;
}
}
【输出结果】
- 一个数如果恰好等于它的因子之和,这个数就称为"完数",例如6=1+2+3。找出1000以内的所有完数。
【思路】嵌套循环:外层遍历1000以内的所有整数i,内层遍历[1,i]的整数j,如果i%j==0,那么说明j是i的因子。依次统计i的所有因子并相加。
【代码】
public class Test8 {
public static void main(String[] args) {
System.out.println("求出1000以内的所有完数,如6=1+2+3。并输出。");
for (int i=1;i<1001;i++){
int sum = 0;
for(int j=1;j<i/2+1;j++){
if(i%j==0){
sum+=j;
}
}
if(sum==i){
System.out.print(i+"\t");
}
}
}
}
【输出结果】
- 一球从100米高度*落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?
【代码】
public class Test9 {
public static void main(String[] args) {
double height=100;
double lucheng = 100;
for(int i=1;i<10;i++){
height = height/2;
lucheng = lucheng+2*height;
}
System.out.println("球第十次落地时共经过了"+lucheng+"米,第10次反弹的高度为"+height+"米");
}
}
【输出结果】
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
【思路】三重嵌套循环
【代码】
public class Test7 {
public static void main(String[] args) {
for(int i=1;i<5;i++){
for(int j=1;j<5;j++){
for(int k=1;k<5;k++){
if(i!=j&&j!=k&&i!=k){
System.out.print(i*100+j*10+k+"\t");
}
}
}
}
}
}
【输出结果】
上一篇:
Mybatis 查询返回List
下一篇: Java学习自我总结——反射基础