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

java基础编程练习题及解答

2017-12-18 11:41 621 查看

java基础编程练习题及解答

虽然说这些题目好多人做过,但是也考考自己对编程的解决方法吧,不对的地方希望大家私信我,谢谢!!!

实例1:

/*
题目:判断101-200之间有多少个素数,并输出所有素数。

素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。
*/
import java.util.Arrays;

public class HelloWorld {
public static void main(String []args) {

//计算质子个数,与非质子个数
int indexs = 0;
int index = 0;
for(int i=101;i<=200;i++){
if((i%2!=0)&(i%3!=0)&(i%5!=0)&(i%7!=0)){
indexs++;
}else{
index++;
}
}
System.out.println(indexs);
System.out.println(index);

int[] nums = new int[indexs];
int[] num = new int[index];
int x = 0;
int y = 0;
for(int i=101;i<=200;i++){
if((i%2!=0)&(i%3!=0)&(i%5!=0)&(i%7!=0)){
nums[x] = i;
x++;
}else{
num[y] = i;
y++;
}
}

System.out.println(Arrays.toString(nums));
System.out.println(Arrays.toString(num));

}
}


实例2:

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

153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。想当年,做这些题都是网上找答案,如今事过境迁,不会也得会。
package test;

public class demo1 {

public static void main(String[] args) {

//定义个位,十位,百位
int a,b,c;
int sum,mul;

for(int i=100;i<=999;i++){
a = i/100;
b = (i-a*100)/10;
c = (i-a*100-b*10);
sum = a*a*a+b*b*b+c*c*c;
mul = a*100+b*10+c;
if(sum == mul){
System.out.println(a+""+b+""+c);
}
}
}
}


实例3:

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

原谅我,这题我作弊了,哈哈,做的时候有点懵逼啊。但是最后我还是靠自己 又写出一遍来,哈哈。。。

package test;

import java.util.Scanner;

public class demo2 {

public static void main(String[] args) {

//匹配数字正则
String reg = "[1-9]\\d{0,}";
@SuppressWarnings("resource")

//创建扫描器对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个正整数:");

//循环
while(true){
String str = scanner.next();

//String强制转换int
int num = Integer.parseInt(str);

//匹配数字
if(str.matches(reg)){

System.out.println("合法数字");

if(num!=1){

System.out.print(num + "是有效的被分解数");

int index = 2;

if(num == 2){

System.out.println(num+"分解后的质因数为: 1*"+num);   //如果输入的是最小质数2

}else{

System.out.print(num+"分解后的质因数为: 1"); //1是所有的正整数的质数
while(num>=index){   //输入的数可以
4000
被k整除
if(num%index==0){
System.out.print("*"+index);           //将k添加到结果中
num = num/index;//除以最小质数后重新循环
}else{
index++;
} //if
} //while
}//if
}else{
System.out.print(num + "是无效的被分解数");
}//if
}else{
System.out.println("非法数字");
}//if
}//while
}
}


实例4:

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

package test;

import java.util.Scanner;

public class demo3 {

public static void main(String[] args) {

@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);

while(true){
System.out.println("请输入成绩");
int score = scanner.nextInt();
if((score >= 90)&(score<100)){
System.out.println("A");
}else if((score >= 60)&(score<89)){
System.out.println("B");
}else if((score >= 0)&(score<59)){
System.out.println("C");
}else{
System.out.println("恭喜你,你的成绩不合理");
}
}
}
}


实例5:

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

方法1:

package test;

import java.util.Scanner;

public class demo4 {

@SuppressWarnings("unused")
public static void main(String[] args) {

//计算字母,空格,数字,其他字符个数
int abcCount = 0;
String abcreg = "[a-zA-Z]";
int spaceCount = 0;
int numCount = 0;
String numreg = "[0-9]";
int otherCount = 0;

@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
char[] ch = str.toCharArray();
for(int i=0;i<ch.length;i++){
if((""+ch[i]).matches(abcreg)){
abcCount++;
}else if((""+ch[i]).matches(abcreg)){
spaceCount++;
}else if((""+ch[i]).matches(numreg)){
numCount++;
}else{
otherCount++;
}
}

System.out.println("字母个数:"+abcCount);
System.out.println("数字个数:"+numCount);
System.out.println("空格个数:"+spaceCount);
System.out.println("其他字符个数:"+otherCount);

}
}

方法2:
import java.util.Scanner;

public class Example {
public static void main(String[] args) {
// TODO Auto-generated method stub
int abcCount=0;//英文字母个数
int spaceCount=0;//空格键个数
int numCount=0;//数字个数
int otherCount=0;//其他字符个数
Scanner scan=new Scanner(System.in);
String str=scan.nextLine();
char[] ch = str.toCharArray();
for(int i=0;i<ch.length;i++){
if(Character.isLetter(ch[i])){
//判断是否字母
abcCount++;
}
else if(Character.isDigit(ch[i])){
//判断是否数字
numCount++;
}
else if(Character.isSpaceChar(ch[i])){
//判断是否空格键
spaceCount++;
}
else{
//以上都不是则认为是其他字符
otherCount++;
}
}
System.out.println("字母个数:"+abcCount);
System.out.println("数字个数:"+numCount);
System.out.println("空格个数:"+spaceCount);
System.out.println("其他字符个数:"+otherCount);
}

}

说说我在方法1遇到的困难:
1.一开始ch[i]匹配正则的时候总是给我报错,但是我知道ch[i]是没有错的,我也把它强制转换为String类型,但是各种报错使得我想方法使它能变成String类型,于是在前面加了一个"",会自动编译成String类型。

2.当我匹配空格的时候,发现会自动停止,就是计算不了空格的个数,还会使程序停止,这肯定是不行的,所以我百度了下,原来是出问题在nextInt(),nextLine(),next()获取值上。

next()  以空格作为分隔符
nextLine()  以行作为分隔符

3.完成了方法1后,方法2就简单了,于是就是Character.is...()判断一下就行了。


实例6:

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

package test;

import java.util.Scanner;

import static java.lang.Math.pow;

public class demo6 {

public static void main(String[] args) {

String reg = "\\d";

@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);

while(true){
int num = scanner.nextInt();
int nums = scanner.nextInt();
if ((""+num).matches(reg)) {
num = Sum(num,nums);
System.out.println(num);
}else{
System.out.println("请输入一个数字");
}
}
}

//  @SuppressWarnings("unused")
public static int Sum(int num,int nums){
int total = 0;
int count=0;
int nowData = 0;
int lastData = 0;
while(count < nums){
nowData = num * (int)pow(10,count++) + lastData;
total = total + nowData;
lastData = nowData;
System.out.println(nowData);
}
return total;
}
}


实例7:

package test;

/*
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。
*/

public class demo7 {

public static void main(String[] args) {

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

int sum = 0;

for(int i=1;i<num;i++){
if(num % i == 0){
sum = sum+i;
}
}
if(sum == num){
System.out.println(sum);
}
}
}
}


实例8:

package test;

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

因为最后的高度小于1,所以把int类型改为double类型
*/

public class demo8{

public static void main(String[] args) {

//球的高度
double height = 100;

//经历的距离
double sum = 0;

for(int index = 1;index<=10;index++){
sum += height;
System.out.println("第"+index+"次落地高度" + height + "米经过"+sum+"米");
height = height/2;
sum += height;
System.out.println("第"+index+"次落地后反跳回" + height +
10196
"米经过"+sum+"米");
}
}
}


实例9:

package test;
/*
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
public class demo9 {

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++){
for(int l=1;l<5;l++){
if((i!=j)&(i!=k)&(i!=l)&(j!=k)&(j!=l)&(k!=l)){
System.out.println(i+""+j+""+k+""+l);
}
}
}
}
}
}
}


实例9:

package test;

import java.util.Scanner;

/*
题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
*/

public class demo10 {

public static void main(String[] args){
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
double profit = scanner.nextDouble();
double money = 0;
if(profit <= 100000){
money = profit * 0.1;
}else if(profit < 200000){
money = 100000 * 0.1 + (profit - 100000) * 0.075;
}else if(profit < 400000){
money = 200000 * 0.1 + (profit - 200000) * 0.05;
}else if(profit < 600000){
money = 400000 * 0.1 +(profit - 400000) * 0.03;
}else if(profit < 1000000){
money = 600000 * 0.1 +(profit - 600000) * 0.15;
}else{
money = 1000000 * 0.1 +(profit - 1000000) * 0.01;
}
System.out.println(money);
}
}


实例10:

package test;

import java.util.Scanner;

/*
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少

sqrt(156+100)=16
sqrt(156+1168)=18
*/

public class demo11 {

public static void main(String[] args) {

@SuppressWarnings({ "resource", "unused" })
Scanner scanner = new Scanner(System.in);
int num=0;
System.out.println(Math.sqrt(156+100));
System.out.println(Math.sqrt(156+168));
while(true){
if((Sqrt(num+100) == true)&&(Sqrt(num+168) == true)){
System.out.println(num);
break;
}
num++;
}
}

public static boolean Sqrt(int num){

if((int)Math.sqrt(num)*(int)Math.sqrt(num)==num){
return true;
}else{
return false;
}

}

}


实例11:

package test;

import java.util.Scanner;

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

public class demo12 {

public static void main(String[] args) {

@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
while(true){
int temo = 0;
int x = scanner.nextInt();
int y = scanner.nextInt();
int z = scanner.nextInt();
if(x>y){
temo=x;
x=y;
y=temo;
}
if(x>z){
temo=x;
x=z;
z=temo;
}
if(y>z){
temo=y;
y=z;
z=temo;
}

System.out.println(x+""+y+""+z);
}
}
}


实例12:

package test;

import javax.security.auth.Subject;

/*
题目:输出9*9口诀。
*/

public class demo13 {

public static void main(String[] args) {
int i,j,Sub;
for(i=1;i<10;i++){
for(j=1;j<10;j++){
Sub = i*j;
System.out.print(i+"*"+j+"="+Sub+"\t");
}
System.out.println("");
}
}
}


实例13:

package test;

import java.util.Scanner;

/*
题目:输入某年某月某日,判断这一天是这一年的第几天?
*/

public class demo14 {

@SuppressWarnings("unused")
public static void main(String[] args) {

int year,month,day;

int[] data = {31,28,31,30,31,30,31,31,30,31,30,31};
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
year = scanner.nextInt();
System.out.print("请输入月份:");
month = scanner.nextInt();
System.out.print("请输入几号:");
day = scanner.nextInt();
int sum = 0;
for(int i=0;i<month-1;i++){
sum += data[i];
}
if ((year%400==0||(year%4==0&&year%100!=0))&&(month>2)){
sum += 1;
}
System.out.println(sum+day);
}
}


实例14:

package test;

/*
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩
下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

*/

public class demo15 {

public static void main(String[] args) {

int amount;//总数
int num = 0;//定义每天剩下的桃子数
;//天数

for(int day=10;day>0;day--){
if(day==10){
num=1;
amount = num;
System.out.println("第"+day+"天有"+amount+"个桃子");
}else{
amount = (num+1)*2;
num = amount;
System.out.println("第"+day+"天有"+amount+"个桃子");
}
}
}
}
/*
规律:(最后一天的桃子+1)*2 = 前一天剩下的桃子
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   ...
amount=(amount/2 - 1)   46/2-1=22
amount=(amount/2 - 1)   22/2-1=10
amount=(amount/2 - 1)   10/2-1=4
amount=(amount/2 - 1)   4/2-1=1
amount=1

第10天有1个桃子
第9天有4个桃子
第8天有10个桃子
第7天有22个桃子
第6天有46个桃子
第5天有94个桃子
第4天有190个桃子
第3天有382个桃子
第2天有766个桃子
第1天有1534个桃子
*/


实例15:

package test;

/*
题目:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,
请编程序找出三队赛手的名单。

*/

public class demo16 {

public static void main(String[] args) {
for(char i ='x';i<='z';i++){
for(char j ='x';j<='z';j++){
if(i!=j)//这里放一个判断,比赛队员不能重复比赛,判断写在外面又可以减少循环次数
for(char k = 'x';k<='z';k++){
if(i!=k&&j!=k)//同上,排除相同
if(i!='x'&&k!='x'&&k!='z')//这里根据题意排除掉不符合的名单
System.out.println("a和"+i+"\n"+"b和"+j+"\n"+"c和"+k+"\n");
}
}
}
}

}


实例16:

package test;

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

public class demo17 {

public static void main(String[] args) {
double[] a = new double[20];
double up=2;
double down=1;
double time = 0;
for(int i=0;i<20;i++){
a[i] = up/down;
time = down;
down=up;
up=time+down;
System.out.println(a[i]);
}
}
}


实例17:

package test;

import java.util.Scanner;

/*
题目:求1+2!+3!+...+20!的和
*/

public class demo18 {

public static void main(String[] args) {

//计算总值
int amount = 0;

//阶乘数
int sum = 0;

@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println("请输入阶乘数:");
int num = scanner.nextInt();

for(int i=1;i<=num;i++){
sum = jiecheng(i);
if(i<num){
System.out.print(i+"!+");
}else{
System.out.print(i+"!=");
}
amount += sum;
}
System.out.println(amount);
}

//处于每个阶乘返回的值
public static int jiecheng(int num){
int sum = 1;
for(int i=1;i<=num;i++){
sum *= i;
}
return sum;
}
}


实例18:

package test;

/*
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问
第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个
人多大?

1:  10
2:  说比第一个人大两岁
3:  又说比第2人大两岁
4:  他说比第3个人大2岁
5:  他说比第4个人大2岁

*/

public class demo19 {

public static void main(String[] args) {

System.out.println(getAge(2));

}

public static int getAge(int num){
if(num==1){
return 10;
}else{
return getAge(num-1)+2;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: