Java基础编程练习

题目:判断101-200之间有多少个素数,并输出所有素数。(素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。)

提示:用从2开始的数一直到它本身-1,去整除。

public static void main(String[] args) {		
System.out.print("质数包括:");
	int input=101;
	int i=2;			
for(input=101;input<201;input++){
    for(i=2;i<input;i++){
        if(input%i==0){
		input++;
		}
		}
System.out.print(input+" ");	
}

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

提示:先求出个、十、百位的数字。X%10是取余数,X/10是取整数。

		int x,y,z;
		int i;
		for(i=100;i<1000;i++){
			z=i/100;
			y=(i-100*z)/10;
			x=i%10;
			if(i==x*x*x+y*y*y+z*z*z){
				System.out.println(i+"是水仙花数");
			}	
		}
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)。

几个数相加有键盘控制。 

提示:先找出规律,再利用Math.pow(10, i)函数,求出每一次累加对应的数字。注意过程中的强制类型转换。

Scanner sc =new Scanner(System.in);
		System.out.println("请输入基数数字");
		int input = sc.nextInt();
		System.out.println("请输入运行次数");
		int acount = sc.nextInt();
		int i=0,j=0;
		int sum=0;
		for(;i<acount;i++){		
			j=(int) (input*Math.pow(10, i)+j);
			System.out.println(j);
			sum=sum+j;						
		}
		System.out.println("求的结果为"+sum);

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 

提示:依旧是先找规律,注意浮点型变量。

double height=100;
		double sum=100;
		int i=0;
		double j=0;
		for(i=0;i<10;i++){
			j=100*Math.pow(0.5, i);
			sum=sum+j;
			System.out.println("第"+(i+1)+"次落地(上升下降)遍历的高度"+j);
			System.out.println("第"+(i+1)+"次落地(上升下降)遍历的总计高度"+sum);
		}

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 

提示:把个、十、百位上的数字可能情况都遍历一遍,然后在所有的情况中筛选出互不相同且无重复的三位数。

int x,y,z;
		for(x=1;x<5;x++){
			for(y=1;y<5;y++){
				for(z=1;z<5;z++){
					if(x!=y&&x!=z&&y!=z){
						System.out.println(x*100+y*10+z);
					}
				}
			}
		}

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

提示:排序的话,随便用一种方法就可以了。此处用了冒泡排序。

Scanner sc =new Scanner(System.in);
		int []Array = new int[3];
		int temp;
		System.out.println("请输入三个整数:");
		for(int i=0;i<1;i++){
			for(int j=0;j<1;j++){
				for(int n=0;n<1;n++){
					int input = sc.nextInt();
					 Array[0]=input;
				}
				int input = sc.nextInt();
				Array[1]=input;
			}
			int input = sc.nextInt();
			Array[2]=input;
		}
		for(int b=0;b<Array.length;b++){
			for(int a=0;a<Array.length;a++){	
				 if(Array[a]>Array[a+1]){
					 temp=Array[a];
					 Array[a]=Array[a+1];
					 Array[a+1]=temp;					 
				 }
			}
		}
		System.out.print("从小到大排序为:");
		for(int a=0;a<3;a++){
			System.out.print(Array[a]+" ");
		}

当然这道题还有更简单的解法(如下图所示),但这个思路仅仅适用于少数的几个数比较,上面的那个冒泡排序方法通用性更强吧。

题目:输出9*9口诀。 

提示:先了解九九乘法表的样式,然后找出规律解题。

int product;
		for(int i=1;i<10;i++){
			for(int j=1;j<=i;j++){
				product=i*j;
				System.out.print(i+"*"+j+"="+product+" ");
			}
			System.out.println();
		}

题目:打印出如下图案(菱形) 

   * 
   *** 
   ****** 
   ******** 
   ****** 
   *** 
   * 

提示:先学会打印一个三角形(见下图),然后翻转一下就成了菱形了。(翻转意味着对for循环的控制语句进行修改)

  * 
   *** 
   ****** 
   ******** 
int i,j;
int []Arr = new int[4];
Arr[0]=8;	Arr[1]=6;	Arr[2]=3;	Arr[3]=1;		
for(i=3;i>=0;i--){
	for(j=i;j>0;j--){
		System.out.print(" ");		
			}
	for(j=Arr[i];j>0;j--){
		System.out.print("*");
			}
    System.out.println();		
		}
for(i=1;i<4;i++){			
	for(j=0;j<i;j++){
		System.out.print(" ");		
			}
	for(j=Arr[i];j>0;j--){
		System.out.print("*");
			}
    System.out.println();			
		}

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 

提示:先找出分子分母的变化规律,如果掌握了分子分母的正确输出,那除法和求和就没问题了。注意用浮点型,因为整型在做除法的时候会去掉小数位,只保留整数位。

	  double i=2;
	  double j=1;
	  double sum=0;
	  for(int n=0;n<20;n++){		  
		   sum=sum+(i/j);		   
		  double temp=i;		  
		  i=i+j;
		  j=temp;  
	  }		
		  System.out.println(sum);

题目:给一个不多于5位的正整数,要求:一、求它是几位数;二、逆序打印出各位数字。 

提示:先要分别求出个、十、百、千、万位上的数字存入数组中,再通过数组下标做一个排序打印。

int Num;
int []Arr =new int[5];
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个不多于5位的正整数:");
String number = sc.next();
int length =number.length();
Num=Integer.parseInt(number);//强制类型转换
System.out.println(length);	
	for(int i=0;i<number.length();i++){		
		Arr[i]=(int) (Num/(Math.pow(10, length-1)));//用数组存放个十百千位上的数字	
		Num=(int) (Num-Arr[i]*(Math.pow(10, length-1)));//求出下一位数字	
		length--;		
			 } 
	for(int j=number.length()-1;j>=0;j--){
		System.out.print(Arr[j]+" ");		 	
			}

题目:输入一个5位数的正整数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 

提示:和上一题差不多,不过相对简单一点了。

int Num;
int []Arr =new int[5];
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个5位数的正整数:");
int number = sc.nextInt();
	for(int i=5;i>0;i--){
		Arr[i-1]=(int) (number/(Math.pow(10, i-1)));//用数组存放个十百千位上的数字	
		number=(int) (number-Arr[i-1]*(Math.pow(10, i-1)));	
			}
	if(Arr[0]==Arr[4]&&Arr[1]==Arr[3]){
		System.out.println("这个数是回文数。");
			}
	else
		System.out.println("这个数不是回文数。");

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

提示:举例数组{2,4,5,8,9},按从小到大排序,插入数组中,要先给原数组扩容。

Arr =Arrays.copyOf(Arr,Arr.length+1);//数组扩容函数

int Arr[] = {2,4,5,8,9};
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int temp;
Arr =Arrays.copyOf(Arr,Arr.length+1);//数组扩容
Arr[5]=number;	
	for(int i=0;i<5;i++){			
		if(Arr[5]<Arr[i]){
			temp=Arr[i];
			Arr[i]=Arr[5];
			Arr[5]=temp;
			}
		}
	for(int j=0;j<6;j++){
			System.out.print(Arr[j]+" ");
		}

【星标题】题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下
的是原来第几号的那位。 

提示:此解法使用的是动态数组ArrayList。通过变量n,来模拟报数;通过动态数组的下标Index来表示每个人的序号。

Scanner sin = new Scanner(System.in);
        int num = sin.nextInt();
        List<Integer> childList = new ArrayList<Integer>();
        //动态数组的声明,其中Integer是int的包装类
        //包装类是为了将基本数据类型当作对象操作引入
        for (int i = 1; i <= num; i++) {
            childList.add(i);//生成一个1、2、3...的数组
        }
        int index = 0;//下标
        int n = 1;
        while(childList.size() != 1) {
            if(n % 3 == 0) {
                childList.remove(index);//删除当前下标对应的内容。
                n = 0;     //相当于初始化n
                index--;  //数组下标变成前一个数字,回到此次操作前的状态
            }
            n++;
            if(index != childList.size()-1) {
                index++;  
            } 
            else {
                index = 0; 
            //当动态数组里只有两个内容存储时,遍历过一遍之后指针再回到第一个下标处
            }
        }
        System.out.println(childList.get(0));

题目:打印出杨辉三角形

提示:杨辉三角的特点是三角形的两条斜边上都是数字1,而其余的数都等于它肩上的两个数字相加。故而用两个数组来相互表示每一行的各个数值会比较方便。

int i=1;
int j;
int A[]=new int[20];
int B[]=new int[20];
A[0]=1;
B[0]=1;
System.out.println(+A[0]);
    while(i<10){		
	System.out.print(B[0]+" ");
		for(j=1;j<=i;j++){
			B[j]=A[j]+A[j-1];
			System.out.print(B[j]+" ");
			}
		i=i+1;
		System.out.println();
		//System.out.println("换A数组");
		System.out.print(A[0]+" ");
		for(j=1;j<=i;j++){
			A[j]=B[j]+B[j-1];
			System.out.print(A[j]+" ");
			}
		i=i+1;
		System.out.println();
		//System.out.println("换B数据");
		}
以上代码只实现了在每行的数值上和杨辉三角相同,至于等腰三角形的形状则没有实现。其实现情况如下:

 

题目:利用递归方法求5! 

提示:return了解一下。return用在void函数中则会中止程序运行,这也是带有void标识符的函数无返回值的要求。

public class Try01 {	
	public int f(int n){
		if(n==0){
			return 1;
		}
		return n*f(n-1);
	}
	public static void main(String[] args) {
		System.out.println((new Try01()).f(5));
		}
}

题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

提示:length作为点后缀使用可直接求字符串长度。

Scanner sc =new Scanner(System.in);
		String input = sc.next();
		int Length;
		Length=input.length();
		System.out.println("该字符串长度为:"+Length);

但是此处字符串中无法识别带空格符的。


将接收用户输入的地方改成nextLine。

Scanner sc =new Scanner(System.in);
String input = sc.nextLine();	
System.out.println("该字符串长度为:"+input.length());

就可以解决了上述问题了。


题目:杭电ACM1000,Java解法。

提示:几次提交都显示Wrong Answer,然后查了攻略,发现在输入部分有问题。顺便get新技能sc.hasnext()。

import java.util.Scanner;
public class Main {
    public static void main(String args[]){
        int a,b;
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt()){
            a=sc.nextInt();
            b=sc.nextInt();
            System.out.println((a+b));
        }
    }
}
简单字符串查找的方法。 
Java提供了一个库函数叫做indexOf()。这个方法可以用在String对象上,它返回的是要查找的字符串所在的位置序号。如果查找不到则会返回-1。


猜你喜欢

转载自blog.csdn.net/steriles_/article/details/79869116