概述
文章目录
- 前言
- 1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
- 2.判断101-200之间有多少个素数,并输出所有素数。
- 3.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
- 4.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 5.学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
- 6.输入两个正整数m和n,求其最大公约数和最小公倍数。
- 7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 8.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
- 9.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
- 10.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
- 总结
前言
因为最近在练习Java编程,看了一个写有50道题的大体量作业,想练练手,而且我看这50道题是五、六年前的了(我不太清楚csdn里有没有很新的答题方法,没有仔细搜),其给的答案我看着有点复杂(可能是太多了,我不想认真看),我就想着用最近所学的重新写一遍看看。
如果我写的程序有什么漏洞的话,请大家务必指出,我自己看自己的程序肯定是看不出什么名堂来的(除非它是飘红了)。
下面我给的代码都是我自己编写(当然不排除有些题想不出来,去网上找的),并在idea上运行一遍了,可以出结果的,并配有详细注释(就算现在没有,之后也会加上的)。
个人感觉写注释还是蛮好的,可以加强个人理解。(注释是给小白看的,如果真的想要更好的理解代码,建议先自己看代码,实在是理解不了再看注释)
因为题目很多,有的和我之前做的重复了,不过还是放这了,同一道题,过几天再写,感触也有所不同。
废话有点多,下面正式开始。
1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析:
第一个月1对
第二个月1对
第三个月 2 对(1+1)
第四个月 3 对(2+1)
第五个月 5 对(3+2)
第六个月 8 对(5+3)
相信到这里,大家就可以看出来了,实际上不用管什么时候兔子开始生啊,每个月有几对兔子生,
这就是一道找规律的数学题而已,不要把自己搞懵了。
这个月的兔子数 = 上个月的兔子数 + 上上个月的兔子数*/
import java.util.Scanner;
public class The01 {
public static void main(String[] args){
//Scanner类获取输入固定用法 Scanner sc = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
//输入月份
System.out.println("请输入查询的月份");
int n = sc.nextInt();
System.out.println("第"+n+"月份有"+rabbit(n)+"对兔子");
}
static int rabbit(int n){
//这里n为形参,n为a,c,d之类的都行,记得如果改的话,下面的也要改
//如果是第一个月或是第二个月
if(n==1 || n==2) {
//返回值1:就一对
return 1;
}else {
//不是的话执行如下
返回上个月的加上上上个月的
return rabbit(n-1)+rabbit(n-2);
}
}
}
2.判断101-200之间有多少个素数,并输出所有素数。
程序分析:
像这样的判断一个数到一个数之间的这样类型的题,首先想到用“for循环”来写,因为for循环可以直接遍历出来。(如果不知道for循环是怎么循环的,可以看我之前写的文章,也可以上网搜)
素数:素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
这里用该数除以另外一个数,如果能够整除,说明该数不是素数。
public class The02 {
public static void main(String[] args){
//循环遍历
for(int i=101;i<=200;i++){
//参数m,记录该数有多少个能够被整除的数
int m = 0;
//遍历被除数,从2开始,1不算(懂的都懂)
//这里从1开始,也行,不过下面的if语句就是m=1了
for (int j=2;j<i;j++){
//能够整除,m+1
if(i%j==0){
m++;
}
}
//素数是指一个能被整除的都不能有
if(m==0){
//输出素数
System.out.println(i);
}
}
}
}
3.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:
打印出所有的水仙花数,就是要遍历了,不然一个个的太麻烦
上面说水仙花数是一个三位数,就给定了范围100~999
上面又说到三次方,利用Math函数里的pow()方法
public class The03 {
public static void main(String[] args){
//遍历,注意是<1000,实际上就是<=999,因为是int类型,整数
for(int i=100;i<1000;i++){
// ‘/’除以,‘%’除以取余数,例如:5%2=1,5除以2余数1
int a = i/100;
//取百位数字
int b = i/10%10;
//取十位数字
int c = i%10;
//取各位数字
//Math.pow(m,n)是指m的n次方。Math.pow(a,3)是指a的3次方
//如果i(一个数)=其百位数的3次方+十位数的3次方+个位数的3次方
if(i==Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)){
//输出水仙花数
System.out.println(i);
}
}
}
}
4.将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:
找一个数的因数也可以用for循环,从2遍历到他自身(保证找全)
如何找因数,是用该数90除以遍历的数2~90来算的,
如何找质因数。
如果90除以2得45
45再除以2,除不尽,除3(2+1)得15
再将15除以2,除不尽,除3(2+1)得5
5再继续除2,除3,除4…
这就是找质因数的方法,上面那个5其实就不用除了,只是举例。
可以看出上是一个循环,90除2得45后,是用45 继续往下走的。
import java.util.Scanner;
public class The04 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个正整数:");
//输入
int n = sc.nextInt();
System.out.print(n+"=");
//循环遍历2到n自身看是否有除尽的
//下面()里的数字只是举例而已
for(int i=2;i<=n;i++){
//运用while循环
//除尽了,且除数n(90)与被除数i(2)不相等
while (n%i==0&&n!=i){
//现在n变为了45
n = n/i;
//输出质因数
System.out.print(i+"*");
}
//除数和被除数相等,就是到了上面说到的变成5了,没得除了,就结束
if(n==i){
System.out.println(i);
break;
}
}
}
}
5.学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:
直接看代码吧,就是简单的if else用法
import java.util.Scanner;
public class The05 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入成绩");
int n = sc.nextInt();
if(n>=0 && n<=100){
if(n>=90){
System.out.println("A");
}else if(n>=60){
System.out.println("B");
}else{
System.out.println("C");
}
}else {
System.out.println("输入有误!");
}
}
}
6.输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:
利用辗除法。
/* 辗转相除法
辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。
可以写成右边的格式。
用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与
第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些
数的最大公约数。*/
import java.util.Scanner;
public class The06 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int m = sc.nextInt();
System.out.println("请输入第二个整数:");
int n = sc.nextInt();
System.out.println(m+"和"+n+"的最大公约数为:"+Max(m,n));
System.out.println(m+"和"+n+"的最小公倍数为:"+Min(m,n));
}
//求最大公约数,用辗转相除法
static int Max(int m,int n){
while (m%n!=0){
int temp = m%n;
m = n;
n = temp;
if(m%n==0){
return n;
}
}
return 0;
}
//求最小公倍数的方法
//两个数最小公倍数乘以最大公约数就等于他们两个数相乘
static int Min(int m,int n){
return m*n/Max(m,n);
}
}
7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:
可以通过ASCII码来判断字符是英文字母、空格、数字还是什么
import java.util.Scanner;
public class The07 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串");
//获取字符串
String str = sc.nextLine();
//将获取的字符串赋值给数组变量arr
char[] arr = str.toCharArray();
//初始化,x,y,z,m,分别表示英文字母数,数字数,其他字符数和空格数
int x=0,y=0,z=0,m=0;
//遍历数组中的值
for(int i=0;i<arr.length;i++){
int n = arr[i];
//英文字母对应的ASCII码范围,以下同
if((n>=65&&n<=90)||(n>=97&&n<=122)){
x++;
//空格
}else if(n==32){
m++;
//数字
}else if(n>=48&&n<=57){
y++;
//其他字符
}else {
z++;
}
}
System.out.println("输入的字母个数:"+x);
System.out.println("输入的数字个数:"+y);
System.out.println("输入的空格个数:"+m);
System.out.println("输入的其它字符个数:"+z);
}
}
8.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:
S就是5个a+4个10倍a+3个100倍a+2个1000倍a+1个10000倍a
import java.util.Scanner;
public class The08 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入n的值:");
//输入
int n = sc.nextInt();
//输入的数是正整数
if(n>0&&n<10){
int s = 5*n+4*n*10+3*n*100+2*n*1000+n*10000;
System.out.println("s的值为:"+s);
}else {
System.out.println("输入的有误!");
}
}
}
9.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析:
又是找多少以内的数,遍历for循环
求因数,也是遍历,for循环
public class The09 {
public static void main(String[] args){
//遍历1到1000的所有数
for(int i=1;i<=1000;i++){
//初始化sum,sum作为后面判断完数的依据
int sum = 0;
//遍历因数
for(int j=1;j<i;j++){
if(i%j==0){
sum +=j;
}
}
//如果满足题目条件
if(sum==i){
//输出
System.out.println(i);
}
}
}
}
10.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析:
从第一次到第十次,遍历,for循环
public class The10 {
public static void main(String[] args){
//初始化参数
double s = 0,t = 0;
int sum = 0;
//遍历1到10次
for(int i=1;i<=10;i++){
//s,单次落下经过多少米。s=100/2的(i-1)次方
s = 100/Math.pow(2,i-1);
System.out.println("第"+i+"次下落经过"+s+"米");
//t,反弹多少米。t=100/2^i(2的i次方)
t = 100/Math.pow(2,i);
//输出反弹值
System.out.println("第"+i+"反弹"+t+"米");
sum +=s;
}
//输出总值
System.out.println("第10次落地时共经过"+sum+"米");
}
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
最后
以上就是魁梧乌龟为你收集整理的50道Java基础编程题(一)——新解2021(配有超详细注释)(1到10题)前言总结的全部内容,希望文章能够帮你解决50道Java基础编程题(一)——新解2021(配有超详细注释)(1到10题)前言总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复