【算法作业】实验二:给立方体排序的小明&&同时整除的数

简介: 【算法作业】实验二:给立方体排序的小明&&同时整除的数

第一题:给立方体排序的小明


1.题目


image.png


2.问题分析与算法设计思路

由可以交换两个相邻的立方体,很容易想到冒泡排序的算法。我们只需要在冒泡排序的过程中记录需要交换的次数即可。


3.算法实现

有一些注释起来的代码,是我之前用于debug的,忽略即可


#include<iostream>
using namespace std;
int SortMP(int a[], int len_a){
  int count=0; //需要进行交换的次数
  int end=len_a - 2; //遍历尾 
  for(int i=0; i < len_a - 1; i++){
  for(int j=0; j <= end; j++){
    if(a[j] > a[j+1]) {
    int t = a[j];
    a[j] = a[j+1];
    a[j+1] = t;
    count++;
    }
  }
  end--;
  }
  return count;
}
int main(){
  int a[10000]={};
  int m=0; //测试用例数 
  int n=0; //立方体数 
  //开始
  cin >> m;
  for(int i = 0; i < m; i++) {
  int count=0; //交换次数 
  int n=0; //立方体数 
  cin >> n;
  int count_max=0; //能够接受的最大交换次数 
  count_max = n * (n - 1) / 2 - 1; 
  //输入立方体
  for(int j = 0; j < n; j++){
    cin>>a[j];
  }
  //测试输入
//  cout<<"input"<<endl;
//  for(int j = 0; j < n; j++){
//    cout<<a[j]<<' ';
//  } 
//  cout<<endl;
  //排序 
  count = SortMP(a, n);
//  cout<<"count "<<count<<endl;
  //测试“排序成功”
//  cout<<"after sort"<<endl;
//  for(int j = 0; j < n; j++){
//    cout<<a[j]<<' ';
//  }  
//  cout<<endl;
  //将立方体置空
  for(int j = 0; j < n; j++){
    a[j] = 0;
  } 
  //测试交换次数
//  cout<<"count "<<count<<endl;
//  cout<<"count_max "<<count_max<<endl;
  //判断交换次数 
  if(count <= count_max){
    cout<<"YES"<<endl;
  }
  else{
    cout<<"NO"<<endl;
  }
  } 
  return 0;
}

4.运行结果

我这里是每读取一组测试数据,就输出一个结果。这和读完所有数据后在开始输出结果的效果其实是一样的。


image.png


5.算法分析

算法的时间复杂度即为冒泡排序的时间复杂度:o ( n 2 ) o(n^2)o(n

2

)。题中n < = 5 ∗ 1 0 4 n<=5*10^4n<=5∗10

4

,该时间复杂度应该还是可以接受的。


第二题:同时整除的数


1.题目

image.png


2.问题分析与算法设计思路

可以每一个种输出结果都使用一个if语句进行判断,这样思路会很简单而清晰。

但显然,对于3、5、7的输出与否,都是可以单独判断的,因此我这里尝试的是将几种情况的输出联系起来。


3.算法实现

#include<iostream>
using namespace std;
int main(){
  int num=0;//输入的整数
  bool by3=0;//能否被3整除 
  bool by5=0;
  bool by7=0; 
  int flag=0;//是否已经被更小的数字整除(用来控制空格的输出)
  cin>>num;
  if(num % 3 == 0) by3 = 1;
  if(num % 5 == 0) by5 = 1;
  if(num % 7 == 0) by7 = 1;
  if(by3) {
  cout<<"3";
  flag=1;
  }
  if(by5) {
  if(flag) cout<<" ";
  cout<<"5";
  flag=1;
  }
  if(by7) {
  if(flag) cout<<" ";
  cout<<"7";
  }
  if(!by3 && !by5 && !by7) cout<<"n";
  return 0;
}

4.运行结果


image.png


5.算法分析

这里程序中并不需要循环、递归的复杂的结构,算法的时间复杂度很低,应为:o ( 1 ) o(1)o(1)。


相关文章
|
7月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
377 5
|
7月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
412 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
8月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
313 1
|
7月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
272 0
|
7月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
230 0
|
8月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
162 0
|
7月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
322 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
7月前
|
机器学习/深度学习 算法 Java
基于灰狼优化算法(GWO)解决柔性作业车间调度问题(Matlab代码实现)
基于灰狼优化算法(GWO)解决柔性作业车间调度问题(Matlab代码实现)
409 1
|
7月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
305 1
|
7月前
|
供应链 算法 调度
基于非支配吸血水蛭优化算法 (NSBSLO)求解多目标柔性作业车间调度问题(FJSP)研究(Matlab代码实现)
基于非支配吸血水蛭优化算法 (NSBSLO)求解多目标柔性作业车间调度问题(FJSP)研究(Matlab代码实现)
200 8

热门文章

最新文章