算法入门几个有用的代码

简介: 算法入门几个有用的代码
#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;
  }
}


相关文章
|
1月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
192 0
|
1月前
|
存储 算法
算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!
给定一个正整数数组和目标值target,找出总和大于等于target的最短连续子数组长度。利用滑动窗口(双指针)优化,维护窗口内元素和,通过单调性避免重复枚举,时间复杂度O(n)。当窗口和满足条件时收缩左边界,更新最小长度,最终返回结果。
|
2月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
181 26
|
2月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
127 6
|
1月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
137 8
|
1月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
146 8
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
578 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
1月前
|
存储 算法
算法入门:专题一:双指针(有效三角形的个数)
给定一个数组,找出能组成三角形的三元组个数。利用“两边之和大于第三边”的性质,先排序,再用双指针优化。固定最大边,左右指针从区间两端向内移动,若两短边之和大于最长边,则中间所有组合均有效,时间复杂度由暴力的O(n³)降至O(n²)。
|
1月前
|
存储 算法 编译器
算法入门:剑指offer改编题目:查找总价格为目标值的两个商品
给定递增数组和目标值target,找出两数之和等于target的两个数字。利用双指针法,left从头、right从尾向中间逼近,根据和与target的大小关系调整指针,时间复杂度O(n),空间复杂度O(1)。找不到时返回{-1,-1}。
|
2月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
219 14

热门文章

最新文章