算法入门几个有用的代码

简介: 算法入门几个有用的代码
#include <iostream>
#include <string>
using namespace std;
// 1. 创建变量(包括三个数组、数组的大小N、三个数组的长度,t表示进位)
const int N = 520;
int a[N], b[N], ans[N], len_a, len_b, len_ans, t;
void readDataAndReverse(int* arr, int& len);
void addData(int* a, int* b, int& len_ans);
void reversePrint(int* ans);
int main() {
  // 2. 读入数据并倒置
  readDataAndReverse(a, len_a);
  readDataAndReverse(b, len_b);
  // 3. 数组做累加
  addData(a, b, len_ans);
  // 4. 逆序输出
  reversePrint(ans);
  return 0;
}
函数功能:对两个数组进行累加

高精度加法

------------------------------------------------------------------------------------------------------------------------------

自定义排序准则  上面我们说到sort()函数可以自定义排序准则,以便满足不同的排序情况。使用sort()我们不仅仅可以从大到小排或者从小到大排,还可以按照一定的准则进行排序。比如说我们按照每个数的个位进行从大到小排序,我们就可以根据自己的需求来写一个函数作为排序的准则传入到sort()中。 我们可以将这个函数定义为:

bool cmp(int x,int y){
    return x % 10 > y % 10;
}
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
    return x % 10 > y % 10;
}
int main(){
    int num[10] = {65,59,96,13,21,80,72,33,44,99};
    sort(num,num+10,cmp);
    for(int i=0;i<10;i++){
        cout<<num[i]<<" ";
    }//输出结果:59 99 96 65 44 13 33 72 21 80
    return 0;
} 

--------------------------------------------------------------------------------------------------------------------------------

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
//定义常量,常量值根据实际需要修改,此算法模拟乘法竖式计算过程
//代码做过一定优化,数组空间从下标0(第一个元素)开始使用 
#define LENGTH 1000
char a1[LENGTH], b1[LENGTH];
int a[LENGTH], b[LENGTH], c[LENGTH];
int main() {
    int lena, lenb, lenc, i, j, x;
    //读取乘数 
    gets_s(a1);
    gets_s(b1);
    lena = strlen(a1);
    lenb = strlen(b1);
    //把刚才读取进来的乘数,逆序转换成int类型数字保存到int数组里
    for (i = 0; i < lena; i++) {
        a[lena - i - 1] = a1[i] - 48;
    }
    for (i = 0; i < lenb; i++) {
        b[lenb - i - 1] = b1[i] - 48;
    }
    for (i = 0; i < lena; i++) {
        x = 0;//初始化进位
        for (j = 0; j < lenb; j++) {
            //模拟乘法竖式,进位、错位相加
            c[i + j] = a[i] * b[j] + x + c[i + j];
            x = c[i + j] / 10;//乘法进位
            c[i + j] %= 10;//进位后保留个位 
        }
        c[lenb + i] = x; //错位相加高位进位(先把进位加到高位) 
    }
    lenc = lena + lenb;//两个非零因数相乘,积的位数要么是两个因数位数之和,要么是两个因数位数之和-1 
    //检查最高位是否为0,如果为0,退一位,while循环可以保证即使因数是0也能输出正确的结果而不输出多余前导0 
    while (c[lenc] == 0 && lenc > 0) {
        lenc--;
    }
    for (i = lenc; i >= 0; i--) {
        cout << c[i];
    }
    return 0;
}

高精度乘法

------------------------------------------------------------------------------------------------------------------------------

矩阵的旋转

oid spin(int x,int y,int r)//顺时针旋转90°
{
    for(int i=x-r;i<=x+r;i++)
    {
        for(int k=y-r;k<=y+r;k++)
            temp[i][k]=square[i][k];
    }
    int x1=x+r,y1=y-r;
    for(int i=x-r;i<=x+r;i++)
    {
        for(int k=y-r;k<=y+r;k++)
        {
            square[i][k]=temp[x1][y1];
            x1--;
        }
        x1=x+r,y1++;
    }
}
oid spin_(int x,int y,int r)//逆时针旋转90°
{
  for(int i=x-r;i<=x+r;i++)
  {
    for(int k=y-r;k<=y+r;k++)
      temp[i][k]=square[i][k];
  }
  int x1=x-r,y1=y+r;
  for(int i=x-r;i<=x+r;i++)
  {
    for(int k=y-r;k<=y+r;k++)
    {
      square[i][k]=temp[x1][y1];
      x1++;
    }
    y1--,x1=x-r;
  }
}


相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
9天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
21天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
21 3
|
20天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
1月前
|
搜索推荐
插入排序算法的讲解和代码
【10月更文挑战第12天】插入排序是一种基础的排序算法,理解和掌握它对于学习其他排序算法以及数据结构都具有重要意义。你可以通过实际操作和分析,进一步深入了解插入排序的特点和应用场景,以便在实际编程中更好地运用它。
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
26天前
|
缓存 分布式计算 监控
优化算法和代码需要注意什么
【10月更文挑战第20天】优化算法和代码需要注意什么
18 0