C++系列案例-大数据减法-绘制余弦曲线-兔子数量-快速排序
文章目录
- 关于C++的几个经典案例代码
- 大数减法问题
- 绘制余弦曲线
- 兔子数量问题
- 快速排序问题
- 函数运行
- 全部源码
关于C++的几个经典案例代码
大数减法问题
因为较大整数的相加很可能超出整型的32位限制,或者本身就是超出限制的大数之间的加减运算。
所以我们需要单独写一个能大数相加减的函数
基本原理:把数字用字符串的形式来保存加减的结果或大数字本身就不会超出限制,比如“999999999999999999999999999999” 多长都可以。
#include <iostream>
#include <vector>
#include<math.h>using namespace std;
//************************大数减法******************************bool cmp(vector<int> &A,vector<int> &B)
{if(A.size()!=B.size()){return A.size()>B.size();}for(int i = A.size(); i>=0; i--) //A,B长度相同{if(A[i]!=B[i]){return A[i]>B[i];}}return true;
}vector<int> sub(vector<int> &A,vector<int> &B) //C=A-B
{int t = 0;//借位vector<int> C;for(int i = 0; i<A.size(); i++){t = A[i]-t;if(i<B.size()){t-=B[i];}C.push_back((t+10)%10);if(t<0){t = 1;}else{t = 0;}}while(C.size()>1&&C.back()==0) //去除多余前导0{C.pop_back(); //同时要注意A-B=0时不能把去除掉}return C;
}void subRun() //求A-B
{string a,b;vector<int> A,B,C;cin>>a>>b;for(int i = a.size()-1; i>=0; i--){A.push_back(a[i]-'0');//记得转为数字}for(int i = b.size()-1; i>=0; i--){B.push_back(b[i]-'0');}if(cmp(A,B)) //A>=B{C = sub(A,B);for(int i = C.size()-1; i>=0; i--){cout<<C[i];}}else //A<B{C = sub(B,A);cout<<"-";for(int i = C.size()-1; i>=0; i--){cout<<C[i];}}
}
绘制余弦曲线
余弦函数曲线 分析:输出余弦曲线,余弦曲线坐标显示分为x轴和y轴 即一个x对应一个y值,且余弦函数的是关于π对称的,需要注意的是cos()函数使用的是 弧度.acos函数是反余弦函数。本例基于acos绘制余弦函数。
//************************绘制余弦曲线******************************
void drawCos()
{double y;int x,m;for(y=1; y>=-1; y-=0.1) /*y为列方向,值从1到-1,步长为0.1*/{m=acos(y)*10; /*计算出y对应的弧度m,乘以10为图形放大倍数*/for(x=1; x<m; x++) printf(" ");printf("*"); /*控制打印左侧的 * 号*/for(; x<62-m; x++)printf(" ");printf("*\n"); /*控制打印同一行中对称的右侧*号*/}}
兔子数量问题
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
/*
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
void numRabbit()
{// 月份int month = 0;while(cin >> month){// 分别是三个月份大的兔子数量int m1 = 1, m2 = 0, m3 = 0;while(--month){// 三个月大的兔子等于原来的加上两个月大的m3 = m3 + m2;// 两个月大的由一个月份大的提供m2 = m1;// 每月会生产新兔子m1 = m3;}// 三个加起来cout << m1 + m2 + m3 << endl;}
}
快速排序问题
快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进。
速排序算法通过多次比较和交换来实现排序,其排序流程如下:
(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
关键点
将第一个元素放到中间的位置,使得左边都小于它,右边都大于它
第一个元素的左边和右边,按照步骤一递归
//***********************************快速排序****************************************************
void quickSort(int arr[], int begin, int end) {if (begin >= end) return;int left = begin;int right = end;int temp = arr[left];while (left < right) {//从后往前找比他小的放前面,从前往后找比它大的放后面//以第一个数为基准,必须先从后往前走,再从前往后走while (left < right && arr[right] >= temp) {right--;} //跳出此循环,代表right找到了比temp小的数字,所以此时arr[left]=arr[right]if (left < right) {arr[left] = arr[right];}while (left < right && arr[left] <= temp) {left++;}//同理if (left < right) {arr[right] = arr[left];}if (left == right) {arr[left] = temp;}}quickSort(arr, begin, left - 1);quickSort(arr, left + 1, end);
}void runQuickSort()
{int arr[11] = { 5,6,3,2,7,8,9,1,4,0,0 };quickSort(arr, 0, 10);for (auto x : arr) {cout << x << " ";}
}
函数运行
//************************主函数******************************
int main(){//subRun(); //大数减法drawCos(); //绘制余弦曲线//numRabbit();//兔子的数量runQuickSort(); // 快速排序return 0;}
全部源码
#include <iostream>
#include <vector>
#include<math.h>using namespace std;//************************大数减法******************************bool cmp(vector<int> &A,vector<int> &B)
{if(A.size()!=B.size()){return A.size()>B.size();}for(int i = A.size(); i>=0; i--) //A,B长度相同{if(A[i]!=B[i]){return A[i]>B[i];}}return true;
}vector<int> sub(vector<int> &A,vector<int> &B) //C=A-B
{int t = 0;//借位vector<int> C;for(int i = 0; i<A.size(); i++){t = A[i]-t;if(i<B.size()){t-=B[i];}C.push_back((t+10)%10);if(t<0){t = 1;}else{t = 0;}}while(C.size()>1&&C.back()==0) //去除多余前导0{C.pop_back(); //同时要注意A-B=0时不能把去除掉}return C;
}void subRun() //求A-B
{string a,b;vector<int> A,B,C;cin>>a>>b;for(int i = a.size()-1; i>=0; i--){A.push_back(a[i]-'0');//记得转为数字}for(int i = b.size()-1; i>=0; i--){B.push_back(b[i]-'0');}if(cmp(A,B)) //A>=B{C = sub(A,B);for(int i = C.size()-1; i>=0; i--){cout<<C[i];}}else //A<B{C = sub(B,A);cout<<"-";for(int i = C.size()-1; i>=0; i--){cout<<C[i];}}
}//************************绘制余弦曲线******************************
void drawCos()
{double y;int x,m;for(y=1; y>=-1; y-=0.1) /*y为列方向,值从1到-1,步长为0.1*/{m=acos(y)*10; /*计算出y对应的弧度m,乘以10为图形放大倍数*/for(x=1; x<m; x++) printf(" ");printf("*"); /*控制打印左侧的 * 号*/for(; x<62-m; x++)printf(" ");printf("*\n"); /*控制打印同一行中对称的右侧*号*/}}/*
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
void numRabbit()
{// 月份int month = 0;while(cin >> month){// 分别是三个月份大的兔子数量int m1 = 1, m2 = 0, m3 = 0;while(--month){// 三个月大的兔子等于原来的加上两个月大的m3 = m3 + m2;// 两个月大的由一个月份大的提供m2 = m1;// 每月会生产新兔子m1 = m3;}// 三个加起来cout << m1 + m2 + m3 << endl;}
}//***********************************快速排序****************************************************
void quickSort(int arr[], int begin, int end) {if (begin >= end) return;int left = begin;int right = end;int temp = arr[left];while (left < right) {//从后往前找比他小的放前面,从前往后找比它大的放后面//以第一个数为基准,必须先从后往前走,再从前往后走while (left < right && arr[right] >= temp) {right--;} //跳出此循环,代表right找到了比temp小的数字,所以此时arr[left]=arr[right]if (left < right) {arr[left] = arr[right];}while (left < right && arr[left] <= temp) {left++;}//同理if (left < right) {arr[right] = arr[left];}if (left == right) {arr[left] = temp;}}quickSort(arr, begin, left - 1);quickSort(arr, left + 1, end);
}void runQuickSort()
{int arr[11] = { 5,6,3,2,7,8,9,1,4,0,0 };quickSort(arr, 0, 10);for (auto x : arr) {cout << x << " ";}
}//************************主函数******************************
int main(){//subRun(); //大数减法drawCos(); //绘制余弦曲线//numRabbit();//兔子的数量runQuickSort(); // 快速排序return 0;}
C++系列案例-大数据减法-绘制余弦曲线-兔子数量-快速排序相关推荐
- 清华大数据系列讲座——大数据发展与区块链应用成功举办
2018年9月15日,由清华-青岛大数据工程研究中心主办的"清华大数据系列讲座-大数据发展与区块链应用"在中国海洋大学成功举办.本此讲座邀请到了清华-青岛数据科学研究院执行副院长韩 ...
- “数据星河”系列活动—大数据产业中的商业模式创新沙龙共话新未来
11● July ● 2019 北京 ▲ 沙龙现场 7月11日,数据星河系列活动--大数据产业中的商业模式创新沙龙顺利举行.在大数据强势赋能下,来自不同行业与领域的嘉宾就如何以模式创新迎接未来机遇与挑 ...
- python 大数据开发工程师_大数据系列之大数据开发工程师
继续介绍大数据系列岗位的要求,今天是"最热门"的岗位大数据开发工程师,之所以说热门主要是基于2个原因,一是因为很多应届生或者想转入大数据行业的同学,都是期望从事"大数据开 ...
- 写文章 数据嗨客 | 第2期:线性回归 数据嗨客 | 第2期:线性回归 泊数 泊数 1 年前 普林大数据学院——“机器学习”系列 普林大数据学院依托北京大数据研究院和北京大学,为有需求的企业
数据嗨客 | 第2期:线性回归 泊数 1 年前 普林大数据学院--"机器学习"系列 普林大数据学院依托北京大数据研究院和北京大学,为有需求的企业和用户提供线上线下结合大数据培训服务 ...
- “数据星河”系列沙龙——大数据人才培养现状和思考
269月 数据星河系列沙龙--"大数据人才培养现状和思考" 9月26日,数据星河系列活动--"大数据人才培养现状和思考"沙龙成功召开.此次沙龙特邀梅一多博士,与 ...
- 研讨会 | “数据星河”系列活动—大数据人才培养现状和思考
"数据星河"系列活动-大数据人才培养现状和思考
- 数据可视化系列-01大数据可视化基础
文章目录 1.概述 2.大数据可视化基础 2.1 数据可视化基础知识 1.数据可视化简史: 2.数据可视化是什么: 3.数据可视化的分类: 4.数据可视化流程: 5.数据可视化的意义: 2.2 认识B ...
- “数据星河”系列活动——大数据资源化、资产化、资本化路径
本期"数据星河"系列活动得到了北京大学创业校友联合会的关注与支持.在北京大学校友创业联合会的组织下,来自于大数据.人工智能等新一代信息技术领域的创业者.行业精英.专家学者汇聚沙龙现 ...
- [数据挖掘理论与案例] 大数据的4个V
大数据"的经典定义是可以归纳为4个V:海量的数据规模(volume).快速的数据流转和动态的数据体系(velocity).多样的数据类型(variety)和巨大的数据价值(value),简称 ...
最新文章
- java菜单动态加载功能_Javascript实现动态菜单添加
- 0.项目运行环境和项目经理
- python开发的前景_python开发前景怎么样
- 【必看】这6个吓人的Linux命令,你用过吗?
- antd 嵌套子表格_大型前端项目架构优化探索之路腾讯文档表格
- ASP.NET开源MVC框架Vici MVC(三)HELLO WORD
- UVA10561 Treblecross
- 连接数据库的方法---ODBC
- 杰克逊JSON解析错误-UnrecognizedPropertyException:无法识别的字段,未标记为可忽略[已解决]...
- Linux命令之useradd和userdel(添加、删除用户)
- 服务器好玩的项目_GitHub 上有什么好玩的项目?(附地址)
- 技术管理中的“沟通”
- ubuntu下谷歌开源的TensorFlow Object Detection API的安装教程
- 贾跃亭与孙宏斌的塑料兄弟情
- 克隆CentOS设置网络连接
- Springboot整合SpringSecurity--对静态文件进行权限管理
- TCP建立连接的三次握手过程
- 元素的 “包含块” 如何确定?Containing Block
- android A工程引用B工程
- 计算机离港系统分为模块,计算机离港系统包括( )模块。
热门文章
- 数据库管理员(DBA)的定义及职责
- python写下拉列表在excel_用python处理excel数据(四)实现excel表下拉自动填充
- c语言程序设计足球,使用C语言计算与模拟足球射门.doc
- go pprof初实操体验
- c语言进阶篇:指针(三)
- Z spirit 加强版 可做平安易贷 借贷宝 uber
- setAttribute方法
- JAVA多线程抽奖程序
- 一边学计算机一边上班累的说说,一个人上班累的说说心情短语
- 计算机安全证书吊销,Win7系统电脑玩LOL提示“该站点安全证书吊销不可用”怎么办...