IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java经典例题 -> 正文阅读

[数据结构与算法]java经典例题

文章目录

一、判断是否是闰年

1、闰年

  • 能被4整除,但不能被100整除的年份

  • 能被400整除的年份。

2、设计思路:

2.1、从控制台获取一个数。

Scanner S = new Scanner(System.in);

Scanner是一个扫描仪,java从控制台获取是数值需要扫描仪。

S是声明扫描仪的变量名,可以任意更改,原则上不要和自带函数重复。

new Scanner(System.in)是创建一个新的扫描仪,从控制台里输入。

import java.util.Scanner;

输入完检查一下文件最上边是否有这行代码,如果没有,鼠标点击一下Scanner的位置按下 alt+enter健导入依赖包。

//从控制台获取一个整形变量的方法
int arr1 = S.nextInt();
//从控制台获取一个字符类型的方法
String arr2 = S.next();
//从控制台获取一个double类型的方法
double arr3 = S.nextDouble();

2.2、用if判断是否满足闰年的条件。

if (判断条件){
	如果成立(为真)执行这里代码块
}else{
	如果不成立(为假)执行这里代码块
}

2.3、输出结果

System.out.println( );

通过System.out.println( )向控制台输出,变量名直接输出,文字加英文状态下双引号,字符串和变量之间衔接用英文状态加号

3、代码展示

Scanner S = new Scanner(System.in);
System.out.println("请输入一个年份:");
int arr = S.nextInt();
if ((arr % 4 == 0 && arr % 100 != 0 )|| arr % 400 == 0){
    System.out.println(arr + "是闰年!");
}else{
    System.out.println(arr + "不是闰年!");
}

二、编写程序,输入x的值,求y的值

1、设计思路

1.1、根据题目可以看出x的值是需要从控制台获取的

Scanner S = new Scanner(System.in);
System.out.println("请输入x的值:");
int x = S.nextInt();

1.2、判断输入的x值是大于0还是小于0还是等于0

if (x > 0){
    System.out.println("y = 1");
}else if (x < 0){
    System.out.println("y = -1");
}else{
    System.out.println("y = 0");
}

语法格式解析:

if (当这个条件成立){
    执行这条语句;
}else if (当这个条件成立){
    执行这条语句;
}else{
    当上边两种条件都不成立,执行这条语句;
}

1.3、输出根据题意y的值

2、代码展示

Scanner S = new Scanner(System.in);
System.out.println("请输入x的值:");
int x = S.nextInt();
if (x > 0){
	System.out.println("y = 1");
}else if (x < 0){
	System.out.println("y = -1");
}else{
	System.out.println("y = 0");
}

三、输入1+2+3+…+n的值

1、设计思路

1.1、首先n的值需要从控制台获取

Scanner S = new Scanner(System.in);
System.out.println("请输入n的值:");
int n = S.nextInt();

1.2、利用for循环,从1到n依次遍历。

1.2.1、语法格式:

for (int i = 1; i <= n; i++){
    
}

格式拆分:for(开始初始值;循环次数;循环方式)

上文指从1开始,循环最大到等于n截止,每次加1的方式循环

1.3、创建一个变量累计增加1-n的值

for (int i = 1; i <= n; i++){
   num = num + i;
}

2、代码展示

Scanner S = new Scanner(System.in);
System.out.println("请输入n的值:");
int n = S.nextInt();
int num = 0;
for (int i = 1; i <= n; i++){
    num = num + i;
}
System.out.println("1+2+3+...+n=" + num);

四、输入一个字符串,统计英文、数字和其他字符

1、设计思路

1.1、从控制台获取一个字符串。

Scanner S = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String arr = S.next();

1.2、利用for循环遍历字符串所有字符

 for (int i = 0; i < arr.length(); i++){

 }

arr.length():判断arr字符串的长度。对应遍历次数

1.3、创建三个变量,分别统计英文,数字和其他字符,利用if语句判断字符串的当前字符是什么类型,相应的变量进行累加,并且检测到’#‘结束统计。

int number = 0,  letter = 0,  character = 0;
for (int i = 0; i < arr.length(); i++){
    //判断如果是0-9为数字之间进入,统计数字的变量加一
    if (arr.charAt(i) >='0' && arr.charAt(i) <= '9'){
        number++;
        //判断如果是小写的a和z之间或者大写的A与Z之间进入,统计字母变量加一
    }else if (arr.charAt(i) >= 'a' && arr.charAt(i) <= 'z' || arr.charAt(i) >= 'A' && arr.charAt(i) <= 'Z'){
        letter++;
        //判断如果字符为'#'结束统计
   }else if(arr.charAt(i) == '#'){
        //break是退出距离当前最近的一个for循环或者while循环
         break;
        //如果不为数字和字母为其他字符的时候进入,统计其他字符的变量加一
   }else{
        character++;
   }
}

arr.charAt(i):可以单独取arr这个字符串里的第i个字符

1.4、输出数字和字母和其他字符

2、代码展示

Scanner S = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String arr = S.next();
int number = 0,  letter = 0,  character = 0;
for (int i = 0; i < arr.length(); i++){
    if (arr.charAt(i) >='0' && arr.charAt(i) <= '9'){
        number++;
    }else if (arr.charAt(i) >= 'a' && arr.charAt(i) <= 'z' || arr.charAt(i) >= 'A' && arr.charAt(i) <= 'Z'){
        letter++;
        //判断如果字符为'#'结束统计
   }else if(arr.charAt(i) == '#'){
        //break是退出距离当前最近的一个for循环或者while循环
         break;
        //如果不为数字和字母为其他字符的时候进入,统计其他字符的变量加一
   }else{
        character++;
   }
}
System.out.println(arr + "中数字有:" + number + "个,字母有:" + letter + "个,其他字符有:" + character + "个。");

五、输入五个学生的成绩,求总分和平均分,并对成绩从高到低排序

1、设计思路

1、创建数组,从控制台输入。

1.1、利用for循环遍历数组,给数组从第0位到第4位五个元素赋值

Scanner S = new Scanner(System.in);
int[] arr = new int[5];
for (int i = 0; i < 5; i++){
    System.out.println("请输入第" + (i+1) + "位同学的成绩");
    arr[i] = S.nextInt();
}

2、创建两个变量存放总分和平均分。

int num = 0, average = 0;

3、遍历数组每一位进行排序并且求出总分和平均分

for (int i = 0; i < 5; i++){
    for (int j = i + 1; j < 5; j++){
        if (arr[i] < arr[j]){
            int temp;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    num = num + arr[i];
}

3.1、排序(这里用到冒泡排序)

3.1.1、算法描述

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  3. 针对所有的元素重复以上的步骤,除了最后一个;
  4. 重复步骤1~3,直到排序完成。

3.1.2、动画展示

img

3.1.3、代码展示

for(int i = 0; i < arr1.length; i++){
	for (int j = i; j < arr1.length; j++){
    	if(arr1[i] > arr1[j]){
        	int temp = arr1[i];
        	arr1[i] = arr1[j];
        	arr1[j] = temp;
    	}
	 }
}

3.1.4、结果展示

冒泡排序

六、一位同学缓考,缓考后,老师需要把他的成绩插入班级成绩单中,成绩单已经按照分数从高到低进行排序。

1、设计思路

1.1、从控制台获取其他考生成绩和缓考学生的成绩,并且先按照从高到低排序。

Scanner S = new Scanner(System.in);
System.out.println("请输入班级有多少名学生:");
int num = S.nextInt();
double[] arr = new double[num];
for (int i = 0; i < num-1; i++){
    System.out.print("请输入第" + (i+1) + "位学生成绩");
    arr[i] = S.nextDouble();
}
for (int i = 0; i < num; i++){
    for (int j = i + 1; j < num; j++){
        if (arr[i] < arr[j]){
            double temp;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}

1.2、根据冒泡排序的比较原则,因为是已经排好序的成绩单, 利用if判断,找到比插入数大的成绩,然后存储下标。

System.out.println("请输入缓考学生的成绩:");
double performance = S.nextDouble();
int index = 0;
for (int i = 0; i < num - 1; i++){
    if (arr[i] < performance){
        index = i;
        break;
    }
}

1.3、把存储的数组下标往后的元素对应的下标往后移动以为,在存储的下标元素上存储缓考学生的成绩。

for(int i = num - 1; i > index; i--){
    arr[i] = arr[i-1];
}
System.out.println(Arrays.toString(arr));
arr[index] = performance;
  1. 假如:原本成绩单是{80,50,30,20,10,5,0}
  2. 最后一个0是缓考的人的成绩,还未录入所以初始化为0;
  3. 往后移动需要让成绩单变为
  4. 缓考成绩为35,成绩单是{80,50,30,30,20,10、5}
  5. 在加粗30的位置上,替换为35
  6. 替换后成绩单为{80,50,35,30,20,10、5}

需要从后往前复制到合适的位置,如果从前往后会一直重复。

七、输入一个字符串判断是否为回文字符串,判断过程在函数中实现

1、设计思路

1.1、从控制获取一个字符串,创建一个boolean类型的函数,返回一个boolean值,进行判断。

boolean类型变量有两个数值:

  1. ture真用1表示
  2. false假,用0表示
public static boolean huiwenshu(String arr1){

}
public static void main(String[] args){
    Scanner S = new Scanner(System.in);
	System.out.println("请输入字符串");
	String arr1 = S.next();
	boolean lage = huiwenshu(arr1);
}

1.2、在函数里利用for循环对字符串每一位字符进行遍历。判断是否为回文字符串

1.2.1判断方法:

假如回文串里有i个字符,第s位和i-s-1

例如:“abcba”,i=5个字符

  • 当s = 0,第s位是’a‘,第i - s - 1 = 4,第i-s-1位是’a’
  • 当s = 1,第s位是’b’,第i - s - 1 = 3,第i-s-1位是’b‘
  • 当s = 2,第s位是’c’,第i - s - 1 = 2,第i-s-1位是’c‘
  • 当s = 3,第s位是’b’,第i - s - 1 = 1,第i-s-1位是’b‘
  • 当s = 4,第s位是’a’,第i - s - 1 = 0,第i-s-1位是’a‘

当第s位和第i-s-1位全部相等时,是回文串,但是我们只需要比较i/2次就可以

例如:“abcba”,i=5个字符,i/2 =2(因为是整型变量,所以小数点抹去)

  • 当s = 0,第s位是’a‘,第i - s - 1 = 4,第i-s-1位是’a’
  • 当s = 1,第s位是’b’,第i - s - 1 = 3,第i-s-1位是’b‘

当第s位和第i-s-1位全部相等时,是回文串

1.2.2利用if判断

如果第s位和第i-s-1位全部相等时,返回true,如果有一位不相等,返回flase

public static boolean huiwenshu(String arr1){
    boolean lage = false;
    for (int i = 0; i < arr1.length(); i++){
        if (arr1.charAt(i) == arr1.charAt(arr1.length()-i-1)){
            lage = true;
        }else{
            lage = false;
            break;
        }
    }
    return lage;
}

1.3,在主函数创建boolean类型,存放返回的值。进行判断,如果是真输出是回文数,如果是假输出不是回文数。

if(lage){
    System.out.println("是回文字符串!");
}else{
    System.out.println("不是回文字符串!");
}

2、代码展示

//定义方法,输入一个字符串判断是否是回文
public static boolean huiwenshu(String arr1){
    boolean lage = false;
    for (int i = 0; i < arr1.length(); i++){
        if (arr1.charAt(i) == arr1.charAt(arr1.length()-i-1)){
            lage = true;
        }else{
            lage = false;
            break;
        }
    }
    return lage;
}
public static void main(String[] args) {
    Scanner S = new Scanner(System.in);
    System.out.println("请输入字符串");
    String arr1 = S.next();
    boolean lage = huiwenshu(arr1);
    if(lage){
        System.out.println("是回文字符串!");
    }else{
        System.out.println("不是回文字符串!");
    }
}

八、编写一个整数,判断是否是素数

1、设计思路

1.1、从控制台获取一个数

Scanner S = new Scanner(System.in);
System.out.println("请输入一个数:");
int a = S.nextInt();

1.2、for遍历从2到获取的数-1,判断是否为素数,并且用boolean存储是是否为素数,是的话为true,假为flase

1.2.1、素数:除了1和自身,之外没有可以被自身整除的数

boolean lage = true;
for(int i = 2; i < a; i++){
    if(a % i == 0){
        lage = false;
        break;
    }
}

1.3、输出

if(lage){
    System.out.println(a + "是素数");
}else{
    System.out.println(a + "不是素数");
}

2、代码展示

public static void main(String[] args) {
    //输入一个正整数判断是不是素数
    Scanner S = new Scanner(System.in);
    System.out.println("请输入一个数:");
    int a = S.nextInt();
    boolean lage = true;
    for(int i = 2; i < a; i++){
        if(a % i == 0){
            lage = false;
            break;
        }
    }
    if(lage){
        System.out.println(a + "是素数");
    }else{
        System.out.println(a + "不是素数");
    }
}

九、有一个数列为:1,1,2,3,5,8…,输出这个数列的前30项,每一行输出5个

1、设计思路

1.1、创建斐波那契数列数组,大小为30

int[] feibonaqie = new int[30];

1.2、利用for循环写出斐波那契额列数组

int[] feibonaqie = new int[30];
feibonaqie[0] = 1;
feibonaqie[1] = 1;
for (int i = 2; i < 30; i++){
    feibonaqie[i] = feibonaqie[i-1] + feibonaqie[i-2];
}

1.2.1、斐波那契数列:feibonaqie[] = {1,1,2,3,5,8,13,21,…,n}

公式为:feibonaqie[i] = feibonaqie[i-1]+feibonaqie[i-2];

先写出第1,2个元素

feibonaqie[0] = 1

feibonaqie[1] = 1

第i个元素=第i-1个元素+第i-2个元素

1.3、控制每输出五个换行

int index = 0;
for (int i = 0; i < 30; i++){
    System.out.print(feibonaqie[i] + "\t");
    index++;
    if (index % 5 == 0){
        System.out.println();
    }
}

在for外层创建一个计数变量,for循环里每次输出一条,计数变量加一,判断取余5是否为0,如果为0进行换行,如果不为零继续输出

2、代码展示

//输出前30项斐波那契数列
int[] feibonaqie = new int[30];
feibonaqie[0] = 1;
feibonaqie[1] = 1;
for (int i = 2; i < 30; i++){
    feibonaqie[i] = feibonaqie[i-1] + feibonaqie[i-2];
}
System.out.println("斐波那契数列:");
int index = 0;
for (int i = 0; i < 30; i++){
    System.out.print(feibonaqie[i] + "\t");
    index++;
    if (index % 5 == 0){
        System.out.println();
    }
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-23 00:59:44  更:2022-06-23 01:00:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:35:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码