算法设计与分析实验报告java实现(排序算法、三壶谜题、交替放置的碟子、带锁的门)

一、 实验目的

1.加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;
2.提高学生利用课堂所学知识解决实际问题的能力;
3.提高学生综合应用所学知识解决实际问题的能力。

二、实验任务

1、排序算法
目前已知有几十种排序算法,请查找资料,并尽可能多地实现多种排序算法(至少实现8种)并分析算法的时间复杂度。比较各种算法的优劣。
2、三壶谜题:
有一个充满水的8品脱的水壶和两个空水壶(容积分别是5品脱和3品脱)。通过将水壶完全倒满水和将水壶的水完全倒空这两种方式,在其中的一个水壶中得到4品脱的水。
3、交替放置的碟子
我们有数量为2n的一排碟子,n黑n白交替放置:黑,白,黑,白…
现在要把黑碟子都放在右边,白碟子都放在左边,但只允许通过互换相邻碟子的位置来实现。为该谜题写个算法,并确定该算法需要执行的换位次数。
4、带锁的门:
在走廊上有n个带锁的门,从1到n依次编号。最初所有的门都是关着的。我们从门前经过n次,每次都从1号门开始。在第i次经过时(i = 1,2,…, n)我们改变i的整数倍号锁的状态;如果门是关的,就打开它;如果门是打开的,就关上它。在最后一次经过后,哪些门是打开的,哪些门是关上的?有多少打开的门?

三、实验设备及编程开发工具

实验设备:Win10电脑
开发工具:jdk1.8、IDEA

四、实验过程设计(算法思路及描述,代码设计)

1、排序算法

(1)冒泡排序

1)从第一个数开始,比较相邻的两个数,如果第一个数比第二个数大,则两数交换。
2)对后面的元素进行同样的操作,从开始到最后一个,这样进行一次排序后,数据的最后一位会是最大的。
3)重复上述步骤,直到在一次排序中无交换之后,排序完成。
代码:

public class Maopao {public static void main(String[] args) {int[] array1 = {1,10,5,8,6,4}; bubbleSort(array1);for(int i=0;i<array1.length;i++){System.out.print(array1[i]+" ");}}public static void bubbleSort(int[] array){int tmp;boolean flag = false;  //设置是否发生交换的标志for(int i = array.length-1;i >= 0;i--){for(int j=0;j<i;j++){          if(array[j]>array[j+1]){tmp = array[j];array[j] = array[j+1];array[j+1] = tmp;flag = true;   //发生了交换}}if(!flag)  break;   //没有发生交换,排序完成,退出循环}}
}

冒泡排序

最好的时间复杂度为O(n),最坏时间复杂度为O(n2),平均时间复杂度为O(n2)。

结果:

img

(2)插入排序

1)第一次循环时,从第2个数开始处理。我们将第1个数作为已经排好序的数据:当第2个数 > 第1个数时,将第2个数放在第1个数后面一个位置;否则,将第2个数放在第1个数前面。此时,前两个数形成了一个有序的数据。
2)第二次循环时,我们处理第3个数。此时,前两个数形成了一个有序的数据:首先比较第3个数和第2个数,当第3个数 > 第2个数时,将第3个数放在第2个数后面一个位置并结束此次循环;否则,再和第1个数比较。如果第3个数 > 第1个数,则将第3个数插入第1个数和第2个数中间;否则,第3个数 < 第1个数,则将第3个数放在第1个数前面。此时,前三个数形成了一个有序的数据。
3)后续的数据同理处理,直至结束。
代码:

public class Charu {public static void main(String[] args) {int[] array1 = {1,10,35,8,6,44}; insertionSort(array1);for(int i=0;i<array1.length;i++){System.out.print(array1[i]+" ");}}public static void insertionSort(int[] array){int tmp;for(int i=0;i<array.length;i++){tmp = array[i];  //将当前位置的数给tmpint j = i;for(;j>0&&array[j-1]>tmp;j--){array[j] = array[j-1];}//将当前位置的数插入到合适的位置array[j] = tmp;}}
}

插入排序

最好的时间复杂度为O(n),最坏时间复杂度为O(n2),平均时间复杂度为O(n2)。

结果:

img

(3)选择排序

首先在未排序的数列中找到最小元素,然后将其存放到数列的起始位置。接着,再从剩余未排序的元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
代码:

public class Xuanze {public static void main(String[] args) {int[] array1 = {1,10,35,8,6,44}; selectSort(array1);for(int i=0;i<array1.length;i++){System.out.print(array1[i]+" ");}}public static void selectSort(int[] array){for(int i = 0;i<array.length;i++){int min = array[i];int minindex = i;for(int j = i;j<array.length;j++){if(array[j]<min){  //选择当前最小的数min = array[j];minindex = j;}}if(i != minindex){ //若i不是当前元素最小的,则和找到的那个元素交换array[minindex] = array[i];array[i] = min;}}}
}

选择排序

最好的时间复杂度为O(n2),最坏时间复杂度为O(n2),平均时间复杂度为O(n^2)。

结果:

img

(4)希尔排序

1)比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,算法先将要排序的一组数按某个增量d分成若干组。
2)对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。
3)当增量减到1时,整个要排序的数被分成一组,排序完成。
4)一般的初次取序列的一半为增量,以后每次减半,直到增量为1。
代码:

public class Xier{public static void main(String[] args) {int[] array1 = {22,10,55,87,66,44}; ShellSort(array1);for (int i = 0; i < array1.length; i++) {System.out.print(array1[i]+" ");}}public static int[] ShellSort(int[] array) {int len = array.length;int temp, gap = len / 2;while (gap > 0) {for (int i = gap; i < len; i++) {temp = array[i];int preIndex = i - gap;while (preIndex >= 0 && array[preIndex] > temp) {array[preIndex + gap] = array[preIndex];preIndex -= gap;}array[preIndex + gap] = temp;}gap /= 2;}return array;}
}

希尔排序

最好的时间复杂度为O(nlog2 n),最坏时间复杂度为O(nlog2 n),平均时间复杂度为O(nlog2n)

结果:

img

(5)快速排序

1)从数列中挑出一个元素,称为"基准",重新排序数列。
2)所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。从而一趟排序过程,就可以锁定基准元素的最终位置。
3)对左右两个分块重复以上步骤直到所有元素都是有序的。
代码:

public class Kuaisu {public static void main(String[] args) {int[] array1 = {22,10,55,87,66,44}; quickSort(array1);for(int i=0;i<array1.length;i++){System.out.print(array1[i]+" ");}}public static void quickSort(int[] arr) {qsort(arr, 0, arr.length - 1);}private static void qsort(int[] arr, int low, int high) {if (low >= high)  return;int pivot = partition(arr, low, high);        //将数组分为两部分qsort(arr, low, pivot - 1);                   //递归排序左子数组qsort(arr, pivot + 1, high);                  //递归排序右子数组}private static int partition(int[] arr, int low, int high) {int pivot = arr[low];     //基准while (low < high) {while (low < high && arr[high] >= pivot) --high;arr[low] = arr[high];             //交换比基准大的记录到左端while (low < high && arr[low] <= pivot) ++low;arr[high] = arr[low];           //交换比基准小的记录到右端}//扫描完成,基准到位arr[low] = pivot;//返回的是基准的位置return low;}
}

(6)基数排序

基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。
代码:

import java.util.ArrayList;public class Paixu {public static void main(String[] args) {int[] array1 = {25,8,55,87,66,44}; RadixSort(array1);for (int i = 0; i < array1.length; i++) {System.out.print(array1[i]+" ");}}public static int[] RadixSort(int[] array) {if (array == null || array.length < 2)return array;// 1.先算出最大数的位数;int max = array[0];for (int i = 1; i < array.length; i++) {max = Math.max(max, array[i]);}int maxDigit = 0;while (max != 0) {max /= 10;maxDigit++;}int mod = 10, div = 1;ArrayList<ArrayList<Integer>> bucketList = new ArrayList<ArrayList<Integer>>();for (int i = 0; i < 10; i++)bucketList.add(new ArrayList<Integer>());for (int i = 0; i < maxDigit; i++, mod *= 10, div *= 10) {for (int j = 0; j < array.length; j++) {int num = (array[j] % mod) / div;bucketList.get(num).add(array[j]);}int index = 0;for (int j = 0; j < bucketList.size(); j++) {for (int k = 0; k < bucketList.get(j).size(); k++)array[index++] = bucketList.get(j).get(k);bucketList.get(j).clear();}}return array;}
}

基数排序

最好的时间复杂度为O(nk),最坏时间复杂度为O(nk),平均时间复杂度为O(n*k)

结果:

img

2、三壶谜题

1)本题使用广度优先遍历来进行计算。刚开始我们可以将三个瓶子的状态都标示为一个数。例如800

2)然后开始拓展这个数的所有可能的状态,第一步这个数可以变为(括号里的数是上一步的数字):3 5 0(8 0 0) 、 5 0 3(8 0 0)。

3)然后继续拓展第二步所有可能的状态,并且不得和之前的状态出现重复,即进行剪枝:0 5 3(3 5 0)、3 2 3(3 5 0)、5 3 0(5 0 3)

4)继续进行同样操作,一直到第六步,出现1 4 3(1 5 2),这时候就应该停止了。因为出现了第一个数字4,满足了条件。所以最终的路径就是:143 <-- 152 <-- 602 <-- 620 <-- 323 <-- 350 <-- 800

代码:

import java.util.*;
public class Sanhu {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入三个值表示容器的初始状态,三个瓶子的容积目前是8,5,3:");int x1 = sc.nextInt();int x2 = sc.nextInt();int x3 = sc.nextInt();String string = x1+""+x2+""+x3;System.out.println(string);ContainerPot containerPot = new ContainerPot(8, 0, 0);List<String> list = new ArrayList<String>(); //保存状态list.add(string); //将第一个状态存入到状态数组中containerPot.init();//初始化这些瓶子可以装多少水String result = "";//保存最终带有4的结果int n = 0;//状态计数do {//遍历倒水for (int i = 0; i < 3 && containerPot.flag; i++) {for (int j = 0; j < 3 && containerPot.flag; j++) {if (i != j) { //不能让壶相同if (containerPot.canPour(i, j)) { //是否可以倒水String str = containerPot.getString();//保存初始状态//倒入水containerPot.pour(i, j);String strResult = containerPot.getString();if (!list.contains(strResult)) {list.add(strResult);containerPot.addList(str, strResult);}//如果出现容量为4的壶就停止if (containerPot.pot[0] == 4 || containerPot.pot[1] == 4 || containerPot.pot[2] == 4) {result = result + containerPot.pot[0] + containerPot.pot[1] + containerPot.pot[2];containerPot.flag = false;//已经找到break;}//初始化倒水到上一步containerPot.intPot(str);}}}}n++;containerPot.intPot(list.get(n));} while (containerPot.flag);System.out.println(list);System.out.println(containerPot.listMap);String key = result;System.out.print(key + "<--");do {for (Map.Entry<String, List<String>> entry : containerPot.listMap.entrySet()) {for (int i = 0; i < entry.getValue().size(); i++) {if (entry.getValue().get(i).equals(key)) {System.out.print(entry.getKey() + "<--");key = entry.getKey();break;}}}} while (containerPot.listMap.containsKey(key) && !key.equals(string));System.out.println();}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ContainerPot {int[] pot = new int[3];//    List<String> list;//存放已经出现的结果Map<String, List<String>> listMap = new HashMap<>();int[] maxP = new int[3];boolean flag = true;public ContainerPot(int a, int b, int c) {pot[0] = a;pot[1] = b;pot[2] = c;}public void init() {maxP[0] = 8;maxP[1] = 5;maxP[2] = 3;}//将key值作为它的上一步public void addList(String key, String str) {if (listMap.isEmpty() || !listMap.containsKey(key)) {List<String> temp = new ArrayList<String>();temp.add(str);listMap.put(key, temp);} else {
//            System.out.println(listMap.containsKey(key));
//            System.out.println(listMap.get(key));listMap.get(key).add(str);}}//判读是否已经有这个key值在里面存放了public boolean isAdd(String str) {return listMap.containsKey(str);}//判读是否可以从from壶倒水到to壶public boolean canPour(int from, int to) {//如果没用水就不能倒了if (pot[from] == 0) {return false;}//如果里面已经有水了 就不能倒了if (pot[to] == maxP[to]) {return false;} else {return true;}}//倒水的过程public void pour(int from, int to) {//做一个判读看看是否能剩水if (pot[from] + pot[to] > maxP[to]) {pot[from] = pot[from] - (maxP[to] - pot[to]);pot[to] = maxP[to];} else {pot[to] = pot[to] + pot[from];pot[from] = 0;}}public String getString() {String str = "";for (int i = 0; i < pot.length; i++) {str = str + pot[i];}return str;}public void intPot(String str) {for (int i = 0; i < str.length(); i++) {pot[i] = Integer.parseInt(String.valueOf(str.charAt(i)));}}public void printDD() {for (List<String> value : listMap.values()) {System.out.println(value.toString());}}
}

三壶谜题
时间复杂度为O(n^2)
结果:

img

3、交替放置的碟子

将所有碟子存放在一个数组里,设白碟子为1,黑碟子为0,使其经过若干次冒泡排序的交换,将所有的黑碟子都放在右边,白碟子都放在左边。

代码:

import java.util.Scanner;
public class Jiaoti{public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入碟子的数量2n,其中黑白碟子各n个:");int num=sc.nextInt();//从控制台接受碟子数量int sum[]=new int[num];for(int i=0;i<=(sum.length-1)/2;i++) {sum[2*i]=0;sum[2*i+1]=1;}System.out.println("碟子的初始排序为:");for(int i=0;i<sum.length;i++) {System.out.print(sum[i]+" ");if(sum[i]==1) {System.out.print("白"+" ");}else {System.out.print("黑"+" ");}}System.out.println();//换行/** 进行排序 冒泡排序*/int k = 0;for(int i=0;i<sum.length-1;i++) {for(int j=0;j<sum.length-1-i;j++) {if(sum[j+1]>sum[j]) {int t=sum[j];sum[j]=sum[j+1];sum[j+1]=t;k++;}}}System.out.println("交换的次数为:"+ k);System.out.println("排序后的顺序为:");for(int i=0;i<sum.length;i++) {System.out.print(sum[i]+" ");if(sum[i]==1) {System.out.print("白"+" ");}else {System.out.print("黑"+" ");}}}
}

交替放置的碟子

时间复杂度为O(n)

结果:

img

4、带锁的门

1)这道题需要统计从1到n每个数的因子个数(包括1和自身),每个数的因子个数决定了它代表的门被改变锁状态的次数,若i有奇数个因子,则第i号门最终是开着的,若i有偶数个因子,则第i号门最终仍然是关着的。

2)大多数情况下,每个数的因子是成对出现的,例如数15的因子有1和15,以及3和5,数12的因子有1和12,2和6,3和4,所以有偶数个因子。只有当这个数是完全平方数时,例如1,4,9,16,25,36等等,它的因子除成对出现的以外,还有它的整数平方根作为单独的因子,这些完全平方数的因子数为奇数。所以最终打开的门都会是完全平方数的门。

代码:

import java.util.ArrayList;
import java.util.Scanner;public class Daisuo {public static void main(String[] args){System.out.println("请输入带锁的门的个数:");int n = new Scanner(System.in).nextInt();	int sum = 0;ArrayList<Integer> open = new ArrayList<>();for(int i=1;i*i<=n;i++){open.add(i*i);sum++;}ArrayList<Integer> close=new ArrayList<>();for(int i=1;i<=n;i++){if(!open.contains(i)) //用于判断是否包含某个元素close.add(i);}System.out.println("打开的门的编号为:");for(Integer integer:open){System.out.print(integer +" ");}System.out.println("");System.out.println("关着的门的编号为:");for(Integer integer:close){System.out.print(integer +" ");}System.out.println("");System.out.println("打开的门的个数为:"+ sum);}
}

带锁的门

时间复杂度为O(n)

结果:

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/298591.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

clickhouse sql使用2

1、多条件选择 multiIf(cond_1, then_1, cond_2, then_2, …, else) select multiIf(true,0,1) 当第一条件不成立看第二条件判断 第一个参数条件参数&#xff0c;第二参数条件成立时走 2、clickhouse 在计算时候长出现NaN和Infinity异常处理 isNaN()和isInfinite()处理

设置Chrome打开链接在新标签页显示

Chrome版本 版本 123.0.6312.106&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; 下面这两个页面都有设置按钮&#xff1a; https://www.google.com/?pli1或者https://www.google.com/?hlzh-CN 要先退出账号&#xff0c;要不然看不到右下角的 “设置” 。…

LNMP环境:揭秘负载均衡与高可用性设计

lb1: 192.168.8.5 lb2: 192.168.8.6 web1:192.168.8.7 web2:192.168.8.8 php-fpm: 192.168.8.9 mysql: 192.168.8.10 nfs:192.168.8.11 分别插入镜像 8.5-8.8 分别安装nginx,并设置启动 8.9 安装php 8.10 安装mysql 先配置一台web服务器然后同步 设置网站根目录 cp -…

微信小程序短链接工具推荐

现在微信小程序大行其道&#xff0c;但工作中大部分人选择了短链接的方式来推广微信小程序&#xff0c;那么微信小程序短链接工具哪个好?今天就分享一篇从网上看到的关于《微信小程序短链接工具推荐》文&#xff0c;作者是souki&#xff0c;一起来看看吧! 一、缩链 1、生成方…

Kubernetes(k8s):部署、使用 metrics-server

Kubernetes&#xff08;k8s&#xff09;&#xff1a;部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…

mac 切换 jdk

查看 mac 上都有哪些版本 /usr/libexec/java_home -V看准版本切换 按前缀切换 比如 export JAVA_HOME/usr/libexec/java_home -v 1.8这样会随机一个 1.8 的 如果想再确定一个比如 openjdk export JAVA_HOME/usr/libexec/java_home -v 1.8.0_292这个方式是临时的&#xff0c…

基于PID-UKF/AUKF锂电池SOC估计

&#xff08;1&#xff09;对UKF进行改进&#xff0c;引入PID控制器 参考文献&#xff1a;https://doi.org/10.1155/2021/6665509 模型&#xff1a;Thevenin模型 电池类型&#xff1a;钴酸锂 工况&#xff1a;DST工况和FUDS工况 MATLAB版本&#xff1a;R2021b 在这篇参考文献…

vulhub中Apache Solr RemoteStreaming 文件读取与SSRF漏洞复现

Apache Solr 是一个开源的搜索服务器。在Apache Solr未开启认证的情况下&#xff0c;攻击者可直接构造特定请求开启特定配置&#xff0c;并最终造成SSRF或任意文件读取。 访问http://your-ip:8983即可查看Apache Solr后台 1.访问http://your-ip:8983/solr/admin/cores?indexI…

【C语言】_文件内容操作:随机读写

目录 1. fseek 1.1 随机读文件 1.2 随机写文件 2. ftell 3. rewind 当以读方式打开一个存在且存有内容的文件时&#xff0c;文件指针会默认指向第一个元素。以在test4.txt文件中存储abcdef为例&#xff1a; int main() {//打开文件FILE* pf fopen("E:\\C_文件操作…

Ubuntu22.04中基于Qt开发Android App

文章目录 前言在Ubuntu22.04中配置开发环境案例测试参考 前言 使用Qt开发手机应用程序是一种高效且灵活的选择。Qt作为一个跨平台的开发框架&#xff0c;为开发者提供了统一的开发体验和丰富的功能库。首先&#xff0c;Qt的跨平台性让开发者可以使用相同的代码库在不同的操作系…

后端开发框架Spring Boot快速入门

写在前面 推荐将本文与Spring Boot 相关知识和工具类一文结合起来看&#xff0c;本文为主&#xff0c;上面那篇文章为辅&#xff0c;一起食用&#xff0c;以达到最佳效果&#xff0c;当然&#xff0c;大佬随意。 IDEA创建Spring Boot工程 关于Spring Boot框架项目&#xff0…

Tuxera2023 NTFS for Mac下载,安装和序列号激活

对于必须在Windows电脑和Mac电脑之间来回切换的Mac朋友来说&#xff0c;跨平台不兼容一直是一个巨大的障碍&#xff0c;尤其是当我们需要使用NTFS格式的硬盘在Windows和macOS之间共享文件时。因为Mac默认不支持写入NTFS磁盘。 为了解决这一问题&#xff0c;很多朋友会选择很便捷…

SpamSieve mac垃圾邮件过滤器 直装激活版

SpamSieve通过强大的垃圾邮件过滤技术&#xff0c;帮助用户有效管理和消除不想要的电子邮件。它能与多种电子邮件客户端无缝集成&#xff0c;如Apple Mail、Microsoft Outlook、Airmail等。 软件下载&#xff1a;SpamSieve mac直装激活版下载 该软件利用先进的算法和机器学习技…

二.音视频编辑-媒体组合-播放

引言 当涉及到音视频编辑时&#xff0c;媒体资源的提取和组合是至关重要的环节。在iOS平台上&#xff0c;AVFoundation框架提供了丰富而强大的功能&#xff0c;使得媒体资源的操作变得轻松而高效。从原始的媒体中提取片段&#xff0c;然后将它们巧妙地组合成一个完整的作品&am…

dell灵越5439升级记录(2024年4月5日)

1、内存 5439为单个内存插槽&#xff0c;网上那些写两个的都是乱写的&#xff0c;型号是ddr3L。原来是4G&#xff0c;换成国产全新三星颗粒寨条&#xff0c;8g 1600hz。 淘宝价&#xff1a;47元。 2、CPU和显卡 如果和我一样在系统里面找不到GT740M的独显&#xff0c;那这一步…

PC版复古珠宝饰品网站模板 基于pbootcms的首饰类源码下载

PbootCMS复古珠宝饰品网站模板&#xff1a;PCWAP双端同步&#xff0c;数据即时共享&#xff0c;轻松打造专业饰品首饰平台 本模板基于PbootCMS内核开发&#xff0c;专为饰品首饰网站、复古珠宝饰品网站等企业量身定制。同时&#xff0c;其他行业同样适用&#xff0c;只需替换文…

160 Linux C++ 通讯架构实战14,epoll 反应堆模型

到这里&#xff0c;我们需要整理一下之前学习的epoll模型&#xff0c;并根据之前的epoll模型&#xff0c;提出弊端&#xff0c;进而整理epoll反应堆模型&#xff0c;进一步深刻理解&#xff0c;这是因为epoll实在是太重要了。 复习之前的epoll的整体流程以及思路。 参考之前写…

环信IM集成教程——Web端UIKit快速集成与消息发送

写在前面&#xff1a; 千呼万唤始出来&#xff0c;环信Web端终于出UIKit了&#xff01;&#x1f389;&#x1f389;&#x1f389; 文档地址&#xff1a;https://doc.easemob.com/uikit/chatuikit/web/chatuikit_overview.html 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开…

JAVA毕业设计132—基于Java+Springboot+Vue的自习室座位预约小程序管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的自习室座位预约小程序管理系统(源代码数据库)132 一、系统介绍 本项目前后端分离带小程序&#xff0c;分为管理员、用户两种角色 1、用户&#xff1a; 注…

echart 仪表盘实现指针的渐变色及添加图片

需求&#xff1a; 在仪表盘中设置指针为渐变色&#xff0c;并在仪表盘中间添加图片。 实现重点&#xff1a; 1、仪表盘指针渐变色的实现 渐变色通过设置pointer的itemStyle属性内的color实现&#xff0c;重点是echart版本&#xff0c;这个原本使用4.8.0的版本不起作用&#xff…