自学前十章练习题1(总结)
-
5、从键盘接收一个正整数,该正整数作为行数,输出以下图形
*
***
*****
*******
*********
例如:输入5,则打印如上图5行。
//金字塔模型 public class No1{ public static void main(String[]args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.print("请输入任意一个正整数:");//接收整数 int hangshu=s.nextInt(); //n行循环n次 for (int i=1;i<=hangshu ;i++ )//外层循环控制行数 { for (int j=0;j<hangshu - i;j++ )//空格的控制 { System.out.print(" ");//中间留个空格///不加ln 表示不换行 } //输出*循环 for (int k=0;k < i * 2 - 1 ;k++ ) { System.out.print("*"); } //以上两个for循环结束后,表示一行就结束了 //在这里执行换行 System.out.println(); } } }
-
题目:一个5位数,判断它是不是回文数。即12321是回文数,
个位与万位相同,十位与千位相同/* //这是一个多个if语句组成的回文数判断,升级版在下面 万位:x/10000 千位:x/10000%10 百位:x/10000%10%10 十位:x/10%10 个位:x%10 */ public class No2 { public static void main(String[]args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.print("请输入任意一个五位数:");//接收整数 int x=s.nextInt(); //先判断输入的数是五位数 if (x-100000 > 0)//输入的数字不能大于五位 { System.out.println("输入的数字不在范围内,请重新输入!!!"); }else if (x - 10000 >0)//在五位数内 { if ((x % 10)==(x / 10000)&&(x / 1000 % 10)==(x / 10 % 10))//回文数要求 { System.out.println("x=" + x + "是回文数"); }else if(x - 10000 <0){ System.out.println("您输入的不符合要求!!"); }else{ System.out.println("不是回文数"); return; } } } } /* 目前我还没学数组知识,能力有限, 就只能默认输入的数字为五位且符合要求!!!! public class No2 { public static void main(String[]args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.print("请输入任意一个五位数:");//接收整数 int x=s.nextInt(); for (int a = 10000;a < 99999 ;a++ ) { if ((x % 10)==(x / 10000)&&(x / 1000 % 10)==(x / 10 % 10))//回文数要求 { System.out.println("x=" + x + "是回文数"); break; }else{ System.out.println("不是回文数!!!"); return; } } } } */
-
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,
还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了
一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上
想再吃时,只剩下一个桃子了。求第一天共摘了多少/* 逆推思维:(好做) day 10 = 1; 假设第九天剩下2个,则第十天吃的是(2/2+1)=2 发现全部吃完没有剩下 ... 假设第九天剩下4个 (4/2+1)=3 那吃了3个还剩下1个满足要求 所以 */ public class No3 { public static void main(String[]args){ int y = 1;//第十天剩下的桃子 for (int i = 10;i > 0 ;i++ ) { m = 2 * m + 1 + 1;//吃前一天的一半多一在加剩下的一个 } System.out.println(m); } }
-
题目:计算 1! + 2! + 3! + 4! +… + 10!
说明:4! 表示4的阶乘。4的阶乘是:1 * 2 * 3 * 4//惊喜还是要得:下面键盘接受~~~~ public class No4 { public static void main(String[]args){ int sum =1; for (int i =1;i<=10 ;i++ ) { sum*=i; } System.out.println(sum); } } /* public class No4 { public static void main(String[]args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.println("请输入任意一个数:"); int num=s.nextInt(); int a=1; int b=1; while (num>=a) { b=b*a; a++; } System.out.println("该数的阶乘为:"+b); } } */
-
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半再落下,
求它在第10次落地时,共经过多少米public class No5 { public static void main(String[]args){ float height =100;//高度初始值100 float N = 0;//初始弹过的路程 for (int i = 0;i<10 ;i++ ) { N = N +height; height = height/2;//弹的路程满足 } System.out.println("第十次小球经过的路程:"+ N+"米"); //System.out.println("第十次小球的高度:"+ height+"米"); } }
-
一个四位数,恰好等于去掉它的首位数字之后所剩的三位数的3倍,这个
四位数是多少?public class No6 { public static void main(String[]args){ for(int num = 1000; num <= 9999; num++){//保证是四位数 int qianwei = num/1000;//去首位 if(num == (num-qianwei*1000) * 3){ System.out.println("该四位数为:" + num); } } } }
-
这里加一些程序选择题目
int a = 0; while (a < 5) { switch(a) { case 0: case 3: a = a + 2; case 2: a = a + 3; default: a = a + 5; } } System.out.println(a);
输出a的值: 10
int i=0, j=9; do { if (i++ > --j) break; } while (i < 4); System.out.println("i=" + i + " and j=" + j)
输出i跟j的值:: i=5 j=4
for (int i=0;i<10;i++) { if (i == 10-i) break; if (i % 3 != 0) continue; System.out.print(i + " "); }
break :跳出循环 continue:执行下一个
第一个if结束时i的值为01234 第二个在if条件判断下i的值分别为0 3; 如果第二个if条件设置成 if(i % 3 ==0)则输出的i值为124.
-
编写一个方法,求整数n的阶乘,例如5的阶乘是12345
思考:这个方法应该起什么名字,这个方法的形参是什么,方法的返回值类型是什么。public class No7 { public static void main(String[]args){ int Zhi=JieCheng(5);//改变数字,就能求出该数字的阶乘 System.out.println(Zhi);//120 } public static int JieCheng(int n){ int result =1; for (int i=n;i>1 ;i-- ) { result =result*i;//也可以result*=i; } return result; } } /* //在之前的方法中 */ /* public class No7 { public static void main(String[]args){ int sum =1; for (int i =1;i<=5 ;i++ )//5的阶乘 { sum*=i; } System.out.println(sum); } } */
-
编写一个方法,输出大于某个正整数n的最小的质数。
思考:这个方法应该起什么名字,这个方法的形参是什么,方法的返回值类型是什么。/* 题意: 输出大于某个正整数n的最小的质数 比如:这个正整数n是2 也就是要输出:大于2的最小的质数,结果就是3 比如:这个正整数n是9 也就是要输出:大于9的最小的质数,结果就是11 大于11的最小的质数是:13 思路: 首先,系统一定会先给你一个“正整数n”,然后你基于 这个n往后++,每加1得到的新数m判断一下是否为质数。 */ public class No8 { public static void main(String[]args) { ShuChuZuiXiaoZhiShu(11);//可以改数字 } public static void ShuChuZuiXiaoZhiShu(int n){ while (true) { n++; //判断此时的n是否为质数 boolean flag = ZhiShu(n); if (flag) { System.out.println(n); break; } } } public static boolean ZhiShu(int num){ for (int i = 2;i<num ;i++ ) { if (num%i==0)//质数能被1和自身整除所以i从2开始 { return false; } } return true;//是质数 } }
-
第一题:设计日期类,每个日期对象都可以描述年月日信息。(两个public class 在两个子文件里,必须在同一个位置,下同)
public class No101 { //年 int N; //月 int Y; //日 int R; } /* 设计日期类,每个日期对象都可以描述年月日信息。 */ public class No10 { public static void main(String[]args){ No101 num1 = new No101(); //对象的引用 //实例变量赋值 num1.N = 2020; num1.Y = 10; num1.R = 21; //实例变量的访问(引用.属性名) System.out.println(num1.N+"年"); System.out.println(num1.Y+"月"); System.out.println(num1.R+"日"); } }
-
设计男人类,每个男人都有身份证号、姓名、性别、女人。设计女人类,每个女人都有身份证号、姓名、性别、男人。
public class No111 { String id;//身份证号 String name;//姓名 boolean sex;//性别 } public class No11 { public static void main(String[]args){ No111 num1 = new No111(); num1.id = "010000000000000001";//这里身份证号类型我设置成String类, num1.name = "ZhangSan"; num1.sex = true;//ture 表示男反而.. //输出相应信息 System.out.println("身份证号:"+num1.id); System.out.println("姓名:"+num1.name); System.out.println("性别:"+num1.sex); No111 num2 = new No111(); num2.id = "010000000000000000"; num2.name = "WangHan"; num2.sex = false; System.out.println("身份证号:"+num2.id); System.out.println("姓名:"+num2.name); System.out.println("性别:"+num2.sex); } }
-
一个数如果恰好等于它的因子之和,这个数就是完数,例如 6 = 1 + 2 + 3,编程
找出1000内所有的完数。
public class No13 { public static void main(String[]args){ //一步:先2到1000,每个数字都取出来 for (int i=2;i<=1000 ;i++ ) { //二步:在拿到i以后,判断是否为完数 /*因子:理解 10%1==0 10%2==0 10%5==0 不算本身 1 是否为完数? 不是 所以从2开始判断 */ //找出数字的因子 int sum=0;//变量sum声明位置一定要注意 for (int j=1 ;j<= i/2 ;j++ )//j<i/2 输出结果就得24 /* 假设:判断数字6是否为完数 j取到的值是:1 2 3 4 5 但实际j取到1 2 3就行 发现是取到一半了 */ { if (i % j==0)//j为因子,j累计追加 { sum +=j; } } if (i==sum) //i是一个完数 { System.out.println(i); } } } }
-
辗转相除法求两数最大公约数(能够同时整除他们的最大正整数)
辗转相除法:
- 用较大数除以较小数,
- 再用出现的余数(第一余数)去除除数,(要大数除以小数)
- 再用出现的余数(第二余数)去除第一余数,(要大数除以小数)
- 如此反复,直到最后余数是0为止。
如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数.
public class No15 { public static void main(String[]args){ java.util.Scanner sc = new java.util.Scanner(System.in); int num = 0; int num1 = 0; int temp = 0; num = sc.nextInt(); num1 = sc.nextInt(); sc.close(); if (num < num1) { //保证num的值大于num1,即num(被除数)/(除号)num1(除数)=商......余数 temp = num; num = num1; num1 = temp; } while (num1 != 0) { //当除数=0时,就说明我们已找到两个数的最大公约数 temp = num % num1; //得到两个数的余数 num = num1; num1 = temp; } System.out.println(num); } }