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

JAVA编程练习题(1--10)

2016-04-06 20:34 465 查看
1:
/**
* 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子对数为多少?
* 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
*
* @author super
*
*/
public class Test {

public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
System.out.println("第" + i + "个月的兔子总数为:" + Rabbit(i));
}

}

// 递归处理
public static int Rabbit(int n) {
// 前两个月兔子总数各为1
if (n == 1 || n == 2) {
return 1;
} else {
// 第三个月开始,每个月兔子总数为上个月和上上个月的和
return Rabbit(n - 1) + Rabbit(n - 2);
}
}

}
输出:
第1个月的兔子总数为:1
第2个月的兔子总数为:1
第3个月的兔子总数为:2
第4个月的兔子总数为:3
第5个月的兔子总数为:5
第6个月的兔子总数为:8
第7个月的兔子总数为:13
第8个月的兔子总数为:21
第9个月的兔子总数为:34
第10个月的兔子总数为:55
第11个月的兔子总数为:89
第12个月的兔子总数为:144
第13个月的兔子总数为:233
第14个月的兔子总数为:377
第15个月的兔子总数为:610
第16个月的兔子总数为:987
第17个月的兔子总数为:1597
第18个月的兔子总数为:2584
第19个月的兔子总数为:4181
第20个月的兔子总数为:6765

2:
题目:判断101-200之间有多少个素数,并输出所有素数。
public class Test {

public static void main(String[] args) {
GetSuShu(101, 200);

}

/***
* 获取a,b之间的所有素数并统计输出
*
* @param a
*            起始数字
* @param b
*            结束数字
*/
public static void GetSuShu(int a, int b) {
// 统计素数个数
int count = 0;
// 外循环遍历既定数字范围
for (int i = a; i <= b; i++) {
// 新建一个判断变量
boolean flag = true;
// 从2开始到自身依次相除判断是否素数
for (int j = 2; j < i; j++) {
// 如果不是素数则改为false并跳出内循环
if (i % j == 0) {
flag = false;
break;
}
}
// 如果遍历结束确定是素数则统计并输出
if (flag) {
count++;
System.out.println("第" + count + "个素数:" + i);
}
}
}
}
输出:
第1个素数:101
第2个素数:103
第3个素数:107
第4个素数:109
第5个素数:113
第6个素数:127
第7个素数:131
第8个素数:137
第9个素数:139
第10个素数:149
第11个素数:151
第12个素数:157
第13个素数:163
第14个素数:167
第15个素数:173
第16个素数:179
第17个素数:181
第18个素数:191
第19个素数:193
第20个素数:197
第21个素数:199

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

public static void main(String[] args) {
// 打印水仙花数
// 某个n位数字每一位的n次方相加等于n
// 1^3+5^3+3^=1+125+27=153
int ShuiSum = 0;
for (int i = 0; i < 1000; i++) {
if (i == Math.pow(i % 10, 3) + Math.pow(i / 100, 3) + Math.pow(i / 10 - (i / 100) * 10, 3)) {
// 个位数字 百位数字 十位数字
System.out.println(i);
ShuiSum++;
}
}
System.out.println("共有水仙花数" + ShuiSum + "个");
}
}
输出:
0
1
153
370
371
407
共有水仙花数6个

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的值,重复执行第一步。Test1:
public class Test {

public static void main(String[] args) {
// 给定一个测试的数字
int n = 120;
// 先输出一个 “120=”
System.out.print(n + "=");
// 从2开始遍历该数字的质数
for (int i = 2; i <= n; i++) {
// 如果能整除,是质数则继续
if (n % i == 0) {
// 是否相同
if (n == i) {
// 如果相同则仅输出数字并跳出循环
System.out.print(i);
break;
}
// 如果不相同说明还可能有后续质数,更新n的值
n /= i;
// 输出 当前质数i 并加上* 号
System.out.print(i + "*");

// 由于获取最小质数后可能还有相同的一个最小质数,所以需要回滚i变量
// 由于每次获取到的肯定是当前最小的质数,所以只需要回滚1就可以了
i--;
}
}
}
}
输出:
120=2*2*2*3*5

Test2:
public classProg4{
public static void main(String[] args){
int n = 13;
decompose(n);
}
private static void decompose(int n){
System.out.print(n+"=");
for(int i=2;i<n+1;i++){
while(n%i==0 && n!=i){
n/=i;
System.out.print(i+"*");
}
if(n==i){
System.out.println(i);
break;
}
}
}
}


5

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。程序分析:(a>b)?a:b这是条件运算符的基本例子。
Test:
public class Test {

public static void main(String[] args) {
int score = 46;
String grade = score >= 90 ? "A" : score >= 60 ? "B" : "C";
System.out.println(grade);
}
}
输出:
C

Test2:
public class Prog5{
publicstatic void main(String[] args){
intn = -1;
try{
n= Integer.parseInt(args[0]);
}catch(ArrayIndexOutOfBoundsExceptione){
System.out.println("请输入成绩");
return;
}
grade(n);
}
//成绩等级计算
privatestatic void grade(int n){
if(n>100|| n<0)
System.out.println("输入无效");
else{
String str = (n>=90)?"分,属于A等":((n>60)?"分,属于B等":"分,属于C等");
System.out.println(n+str);
}
}
}


6:

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

public static void main(String[] args) {
int a = 120;
int b = 90;
System.out.println(a + "和" + b + "的最大公约数为:" + GetGongYue(a, b));
System.out.println(a + "和" + b + "的最小公倍数为:" + GetGongBei(a, b));
}

/***
* 获取两个正整数的最大公约数
*
* @param a
*            参数
* @param b
*            参数
* @return 两个数的最大公约数
*/
public static int GetGongYue(int a, int b) {
// 初始化最大公约数为较小数字
int gongYue = (a < b ? a : b);
// 从较小数字开始向下遍历,满足添加即赋值并跳出循环
for (int i = gongYue;; i--) {
if (a % i == 0 && b % i == 0) {
gongYue = i;
break;
}
}
return gongYue;
}

/***
* 获取两个正整数的最小公倍数
*
* @param a
*            参数
* @param b
*            参数
* @return 两个数字的最小公倍数
*/
public static int GetGongBei(int a, int b) {
// 初始化最小公倍数为较大数字
int gongBei = (a > b ? a : b);
// 向上遍历满足条件即赋值并跳出循环
for (int i = gongBei;; i++) {
if (i % a == 0 && i % b == 0) {
gongBei = i;
break;
}
}
return gongBei;
}
}
输出:
120和90的最大公约数为:30
120和90的最小公倍数为:360

Test2:
public classProg6{
public static void main(String[] args){
int m,n;
try{
m = Integer.parseInt(args[0]);
n = Integer.parseInt(args[1]);
}catch(ArrayIndexOutOfBoundsExceptione){
System.out.println("输入有误");
return;
}
max_min(m,n);
}
//求最大公约数和最小公倍数
private static void max_min(int m, int n){
int temp = 1;
int yshu = 1;
int bshu = m*n;
if(n<m){
temp = n;
n = m;
m = temp;
}
while(m!=0){
temp = n%m;
n = m;
m = temp;
}
yshu = n;
bshu /= n;
System.out.println(m+"和"+n+"的最大公约数为"+yshu);
System.out.println(m+"和"+n+"的最小公倍数为"+bshu);
}
}


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

public static void main(String[] args) {
Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&");
System.out.println("--------------------------");
Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&");
}

// 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
private static void Check(String s) {
int enNum = 0;
int nuNum = 0;
int kongNum = 0;
int othNum = 0;
// 转换成字符数组遍历
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
// 如果是数字
if (Character.isDigit(chs[i])) {
nuNum++;
// 是否字母
} else if (Character.isLetter(chs[i])) {
enNum++;
// 是否空格
} else if (chs[i] == ' ') {
kongNum++;
} else {
// 其他字符
othNum++;
}
}
System.out.println("数字字符数量为:" + nuNum);
System.out.println("字母字符数量为:" + enNum);
System.out.println("空格字符数量为:" + kongNum);
System.out.println("其他字符数量为:" + othNum);
}

//调用字符串charAt()方法遍历
private static void Check2(String s) {
int enNum = 0;
int nuNum = 0;
int kongNum = 0;
int othNum = 0;
for (int i = 0; i < s.length(); i++) {
if (Character.isDigit(s.charAt(i))) {
nuNum++;
} else if (Character.isLetter(s.charAt(i))) {
enNum++;
} else if (s.charAt(i) == ' ') {
kongNum++;
} else {
othNum++;
}
}
System.out.println("数字字符数量为:" + nuNum);
System.out.println("字母字符数量为:" + enNum);
System.out.println("空格字符数量为:" + kongNum);
System.out.println("其他字符数量为:" + othNum);
}
}
输出:数字字符数量为:15
字母字符数量为:13
空格字符数量为:3
其他字符数量为:7
--------------------------
数字字符数量为:15
字母字符数量为:13
空格字符数量为:3
其他字符数量为:7

Test2:
importjava.util.Scanner;
public classProg7_1{
public static void main(String[] args){
System.out.print("请输入一串字符:");
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();//将一行字符转化为字符串
scan.close();
count(str);
}
//统计输入的字符数
private static void count(String str){
String E1 ="[\u4e00-\u9fa5]";//汉字
String E2 = "[a-zA-Z]";
String E3 = "[0-9]";
String E4 = "\\s";//空格
int countChinese = 0;
int countLetter = 0;
int countNumber = 0;
int countSpace = 0;
int countOther = 0;
char[] array_Char = str.toCharArray();//将字符串转化为字符数组
String[] array_String = newString[array_Char.length];//汉字只能作为字符串处理
for(int i=0;i<array_Char.length;i++)
array_String[i] = String.valueOf(array_Char[i]);
//遍历字符串数组中的元素
for(String s:array_String){
if(s.matches(E1))
countChinese++;
else if(s.matches(E2))
countLetter++;
else if(s.matches(E3))
countNumber++;
else if(s.matches(E4))
countSpace++;
else
countOther++;
}
System.out.println("输入的汉字个数:"+countChinese);
System.out.println("输入的字母个数:"+countLetter);
System.out.println("输入的数字个数:"+countNumber);
System.out.println("输入的空格个数:"+countSpace);
System.out.println("输入的其它字符个数:"+countSpace);
}
}
importjava.util.*;
public classProg7_2{
public static void main(String[] args){
System.out.println("请输入一行字符:");
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
scan.close();
count(str);
}
//统计输入的字符
private static void count(String str){
List<String> list = newArrayList<String>();
char[] array_Char = str.toCharArray();
for(char c:array_Char)
list.add(String.valueOf(c));//将字符作为字符串添加到list表中
Collections.sort(list);//排序
for(String s:list){
int begin = list.indexOf(s);
int end = list.lastIndexOf(s);
//索引结束统计字符数
if(list.get(end)==s)
System.out.println("字符‘"+s+"’有"+(end-begin+1)+"个");
}
}
}

8:
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。程序分析:关键是计算出每一项的值。
public class Test {

public static void main(String[] args) {

for (int i = 1; i < 10; i++) {
System.out.println(Sum(2, i));
}
}

/***
* 特殊求和方法 求s=a+aa+aaa+aaaa+aa...a的值
*
* @param a
*            要做相加操作的数字
* @param count
*            相加的次数
* @return 总和
*/
private static int Sum(int a, int count) {
// 求和变量
int sum = 0;
// 临时变量
int temp = a;
// 经历count次求和
for (int i = 0; i < count; i++) {
// 第一次的和即a的值
sum += temp;
// 之后的值每次更新为a上一次的值乘10再加上a
temp = temp * 10 + a;
}
return sum;
}
}
Test2:
importjava.util.Scanner;

public classProg8{
public static void main(String[] args){
System.out.print("求s=a+aa+aaa+aaaa+...的值,请输入a的值:");
Scanner scan = newScanner(System.in).useDelimiter("\\s*");//以空格作为分隔符
int a = scan.nextInt();
int n = scan.nextInt();
scan.close();//关闭扫描器
System.out.println(expressed(2,5)+add(2,5));
}
//求和表达式
private static String expressed(int a,intn){
StringBuffer sb = new StringBuffer();
StringBuffer subSB = new StringBuffer();
for(int i=1;i<n+1;i++){
subSB = subSB.append(a);
sb = sb.append(subSB);
if(i<n)
sb = sb.append("+");
}
sb.append("=");
return sb.toString();
}
//求和
private static long add(int a,int n){
long sum = 0;
long subSUM = 0;
for(int i=1;i<n+1;i++){
subSUM = subSUM*10+a;
sum = sum+subSUM;
}
return sum;
}
}


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

Test:
public class CeShi {
/**
* 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
*
* @param args
*/
public static void main(String[] args) {
WanShu(1000);
}

/***
*
* @param n
*/
private static void WanShu(int n) {
int count = 0;
// 从1到给定的数字n遍历
for (int i = 1; i <= n; i++) {
// 待用变量
int temp = 0;
// 内循环从1到n/2获取各个最小质数
for (int j = 1; j <= n / 2; j++) {
// 判断是否当前数字的质数
if (i % j == 0) {
// 如果是质数就累加
temp += j;
// 如果质数累加的结果和当前数字相同,则判定为完数并输出
if (temp == i) {
System.out.println(i);
count++;
}
}
}

}
System.out.println(n + "以内共有" + count + "个完数");
}
}
输出:
1
6
24
28
496
1000以内共有5个完数

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

public class CeShi {
/**
* 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半; 再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
*
* @param args
*/
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
GetHeight(i);
System.out.println("------------------------------");
}

}

private static void GetHeight(int count) {
// 统计第count次弹起时经过的距离
double sum = 0.0;
// 统计第count次下落时经过的距离
double sum2 = 0.0;
// 原始高度
double height = 100.0;

for (int i = 1; i <= count; i++) {
// 每次弹起时经过的距离为下落时高度的1.5倍
sum += height + height / 2;
// 当达到第count次时,弹起时的总距离减去最后一次弹起的高度即为第count次下落时经过的距离
if (i == count) {
sum2 = sum - height / 2;
System.out.println("第" + count + "次时弹起的高度为:" + height / 2);
}
// 每弹起一次,起始下落高度减半
height /= 2;

}
System.out.println("第" + count + "次落下时经过的距离是:" + sum2 + "米。");
System.out.println("第" + count + "次弹起时经过的距离是:" + sum + "米。");
}
}
输出:
第1次时弹起的高度为:50.0
第1次落下时经过的距离是:100.0米。
第1次弹起时经过的距离是:150.0米。
------------------------------
第2次时弹起的高度为:25.0
第2次落下时经过的距离是:200.0米。
第2次弹起时经过的距离是:225.0米。
------------------------------
第3次时弹起的高度为:12.5
第3次落下时经过的距离是:250.0米。
第3次弹起时经过的距离是:262.5米。
------------------------------
第4次时弹起的高度为:6.25
第4次落下时经过的距离是:275.0米。
第4次弹起时经过的距离是:281.25米。
------------------------------
第5次时弹起的高度为:3.125
第5次落下时经过的距离是:287.5米。
第5次弹起时经过的距离是:290.625米。
------------------------------
第6次时弹起的高度为:1.5625
第6次落下时经过的距离是:293.75米。
第6次弹起时经过的距离是:295.3125米。
------------------------------
第7次时弹起的高度为:0.78125
第7次落下时经过的距离是:296.875米。
第7次弹起时经过的距离是:297.65625米。
------------------------------
第8次时弹起的高度为:0.390625
第8次落下时经过的距离是:298.4375米。
第8次弹起时经过的距离是:298.828125米。
------------------------------
第9次时弹起的高度为:0.1953125
第9次落下时经过的距离是:299.21875米。
第9次弹起时经过的距离是:299.4140625米。
------------------------------
第10次时弹起的高度为:0.09765625
第10次落下时经过的距离是:299.609375米。
第10次弹起时经过的距离是:299.70703125米。
------------------------------

Test2:
importjava.util.Scanner;
public classProg10{
public static void main(String[] args){
System.out.print("请输入小球落地时的高度和求解的次数:");
Scanner scan = newScanner(System.in).useDelimiter("\\s");
int h = scan.nextInt();
int n = scan.nextInt();
scan.close();
distance(h,n);
}
//小球从h高度落下,经n次反弹后经过的距离和反弹的高度
private static void distance(int h,int n){
double length = 0;
for(int i=0;i<n;i++){
length += h;
h /=2.0 ;
}
System.out.println("经过第"+n+"次反弹后,小球共经过"+length+"米,"+"第"+n+"次反弹高度为"+h+"米");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  super 练习题 public