c/c++快乐算法第三天
c/c++感受算法快乐(3)
开始时间2023-04-16 22:21:10
结束时间2023-04-17 00:09:34
前言:很好,这周就要结束了,大家都回学校了么,嘻嘻。回顾一下昨天的算法题,1.4抓交通肇事犯运用枚举模拟,1.5兔子产子问题运用迭代循环,1.6牛顿迭代法求方程根迭代循环,1.7最佳存款问题迭代循环。什么是迭代?对计算机特定程序中需要反复执行的子程序(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。快来看看今天的问题叭!
第一章 趣味算法入门
第八题 冒泡排序
一.问题描述
二.设计思路
有输入,并且为自行输入的n个整数序列。这里我们需要用到冒泡排序,冒泡排序是什么?它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成,如同汽水中的气泡最终会冒到顶部一样顾名冒泡排序。冒泡排序总的平均时间复杂度为,冒泡排序是一种稳定排序算法。升序排列为数据从小到大排列。
三.流程图
四.源代码
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
int i=0,j=0,temp;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
五.运行结果
第九题 折半查找
一.问题描述
二.设计思路
三.流程图
四.源代码
#include<stdio.h>
int main()
{
int arr[]={3,4,10,13,33,42,46,63,76,78,95,96,120};
int size=sizeof(arr)/sizeof(arr[0]);//数组的长度
int x,middle;
scanf("%d",&x);//输入要查找的数
int left=0;
int right=size;
while(left<=right)//循环条件
{
middle=(left+right)/2;//中间数
if(arr[middle]<x)
{
left=middle+1;//要查找的数在中间数的右边,左端加一即向右移,缩小范围
}
else if(arr[middle]>x)
{
right=middle-1;//要查找的数在中间数的左边,右端加一即向左移,缩小范围
}
else if(arr[middle]=x)//最后当中间数=要查找的数时查找完毕
{
printf("%d在arr[%d]\n位置:第%d个数",x,middle,middle+1);
break;
}
}
if(left>right)//当left>right时证明此范围内不存在要查找的数
{
printf("查无此数\n");
}
return 0;
}
五.运行结果
第十题 数值转换
一.问题描述
二.设计思路
三.流程图
四.源代码
#include<iostream>
using namespace std;
#define Max 101 //限定数组最大长度
int char_to_num(char ch); //返回字符对应的数字
char num_to_char(int num); //返回数字对应的字符
long source_to_decimal(char temp[],int source);
//返回由原数转换成的十进制数
int decimal_to_object(char temp[],long decimal_num,int object);
//返回转换成目标进制的数组长度
void output(char temp[],int length); //将字符数组逆序输出
int main(){
int source; //存储原来的进制
int object; //存储目标进制
int length; //存储转化后的数组长度
long decimal_num; //存储转换成的十进制数
char temp[Max]; //存储待转化的数值 和转化后的数值
int flag=1; //是否结束程序
while(flag)
{
cout<<"转换前的数是:";
cin>>temp;
cout<<"转换前的进制是:";
cin>>source;
cout<<"转换后的进制是";
cin>>object;
cout<<"转换后的数值是:";
decimal_num=source_to_decimal(temp,source);
length=decimal_to_object(temp,decimal_num,object);
output(temp,length);
cout<<"继续请输入1,否则输入0";
cin>>flag;
}
}
int char_to_num(char ch)
{
if(ch>='0'&&ch<='9')
return ch-'0'; //0~9
else
return ch-'A'+10;//大于10的数字
}
char num_to_char(int num)
{
if(num>=0&&num<=9)
return (char)('0'+num-0);
else
return (char)('A'+num-10);
}
long source_to_decimal(char temp[],int source)
{
long decimal_num=0;
int length;
int i;
for(i=0;temp[i]!='\0';i++);
length=i;
for(i=0;i<length-1;i++)
decimal_num=(decimal_num*source)+char_to_num(temp[i]);
return decimal_num;
}
int decimal_to_object(char temp[],long decimal_num,int object)
{
int i=0;
while(decimal_num)
{
temp[i]=num_to_char(decimal_num%object);
decimal_num=decimal_num/object;
i++;
}
temp[i]='\0';
return i;
}
void output(char temp[],int length)
{
int i;
for(i=length-1;i>=0;i--)
cout<<temp[i];
cout<<endl;
}
五.运行结果
总结:恭喜你学完第一章趣味算法入门!不知你是在为新赛季的阴间队友而气出内伤,还是在为三千字职业生涯规划结课论文而默默流泪,总之明天就是周一,新的一周就要开始咯,冲哇冲哇!
每日一mo:Opportunity is missed by most people because it is dressed in overalls and looks like work.
c/c++快乐算法第三天的更多相关文章
- java排序算法(三):堆排序
java排序算法(三)堆排序 堆积排序(HeapSort)是指利用堆积树这种结构所设计的排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法.辅助空间为O(1).最坏时间复杂度 ...
- Java数据结构和算法(三)顺序存储的树结构
Java数据结构和算法(三)顺序存储的树结构 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preO ...
- LK光流算法的三个假设
在实际过程中采用 Lucas-Kanade 光流算法跟踪运动物体特征点的时候,一个很明显的特点是LK算法(包括其他光流算法)不能计算"大运动",加上金子塔的方法稍微好点. 这是什么 ...
- Java排序算法(三)
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈
定场诗 金山竹影几千秋,云索高飞水自流: 万里长江飘玉带,一轮银月滚金球. 远自湖北三千里,近到江南十六州: 美景一时观不透,天缘有分画中游. 前言 本章是重读<学习JavaScript数据结构 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列
定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读<学习JavaScript数据结构与算法-第三版>的系列文章,主要讲述队列数据 ...
- 数据挖掘算法(三)--logistic回归
数据挖掘算法学习笔记汇总 数据挖掘算法(一)–K近邻算法 (KNN) 数据挖掘算法(二)–决策树 数据挖掘算法(三)–logistic回归 在介绍logistic回归之前先复习几个基础知识点,有助于后 ...
- 算法(三)粒子群算法PSO的介绍
一.引言 在讲算法之前,先看两个例子: 例子一:背包问题,一个书包,一堆物品,每个物品都有自己的价值和体积,装满书包,使得装的物品价值最大. 例子二:投资问题,n个项目,第i个项目投资为ci 收益为p ...
- 建模算法(三)——非线性规划
一.非线性规划和线性规划不同之处 1.含有非线性的目标函数或者约束条件 2.如果最优解存在,线性规划只能存在可行域的边界上找到(一般还是在顶点处),而非线性规划的最优解可能存在于可行域的任意一点达到. ...
- STL中sort排序算法第三个参数_Compare的实现本质
关于C++ STL vector 中的sort排序算法有三种自定义实现,它们本质上都是返回bool类型,提供给sort函数作为第三个参数. 重载运算符 全局的比较函数 函数对象 我认为从实现方式看,重 ...
随机推荐
- 设计模式 (Design Pattern)C# -- 简介
简介 设计模式(Design Pattern)是对面向对象设计中反复出现的问题的解决方案. 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用. 设计模式是软件开发人员在软件开发过程 ...
- WCF使用post 提交
[OperationContract] [WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFor ...
- Centos 配置网络自启和静态IP和主机名
1. 修改配置文件 vim /etc/sysconfig/network-scripts 2. vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPR ...
- Java8中Stream()流的用法总结
简单的集合遍历 foreach遍历 import java.util.ArrayList; import java.util.List; /** * @author rx * @date 2022/6 ...
- sqlserver 生成随机值
随机生成100以内的整数 select top 10 number,ceiling(rand(checksum(newid()))*100) from master.dbo.spt_valueswhe ...
- discuz论坛或门户下载的图片无法显示?
discuz论坛或门户下载的图片无法显示? 使用某些插件或者软件(例如火车头采集器,简数采集工具等)的图片下载功能,发现下载成功了后台也有但是前台无法显示,捣鼓了一轮最终才发现是路径的问题. disc ...
- Xamarin.Android 利用作业计划程序实现ImageSwitcher图片自动定时轮播
在开发android程序时,遇到一个问题,ImageSwitcher只支持手动的切换图片,不支持自动定时的切换.因为xamarin的资料很少,官方也没有相应的教程,所以想到这个方法,利用job程序来实 ...
- uni-popup 遮不住头部标题的解决办法
要做一个小程序,会有弹窗,但是uni-app的API组件uni.showModal不足以满足我的需求,于是我用HBuilderX引入了uni-popup. 代码是这样的 <button @cli ...
- Android笔记--添加联系人
添加联系人(将联系人信息添加到手机的通讯录里面) 方式一:使用ContentResolver方法写入对象,每次一个字段 新创建一个需要加入通讯录的对象(我这里写的比较简单,并不是通讯录的标准格式,就是 ...
- Android笔记--Android+数据库的增加数据的实现
具体实现 添加成功: 界面代码很简单,直接忽略. 连接数据库的代码: Connect.java package com.example.myapplication.database; import a ...