java1月至10月怎么表示_JAVA编程练习题(1--10)

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 

// 如果不是素数则改为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 

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

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 

// 从较小数字开始向下遍历,满足添加即赋值并跳出循环

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

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 

// 如果是数字

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 

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_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 list = newArrayList();

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 

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 

// 第一次的和即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

subSB = subSB.append(a);

sb = sb.append(subSB);

if(i

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

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

length += h;

h /=2.0 ;

}

System.out.println("经过第"+n+"次反弹后,小球共经过"+length+"米,"+"第"+n+"次反弹高度为"+h+"米");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值