自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 大整数相加与相减

两个大整数相加或相减的问题是很经典的问题。先输入两个大整数,用string保存,然后转换成自定义的大整数的值。最后先输出两个数的相加的值,再输出两个数的相减的值。#include <iostream>#include <algorithm>#include <cstdio>#include <string>using namespace std;typedef struct bignum{ int d[1000]; int le

2020-05-31 23:30:06 392

原创 基于C++的string方法来解决大数相加问题

大数相加问题一直是一个很经典的算法问题。给定两个非常非常大,大到超越了不可能用int,long long int等类型表示的数字,所以就要用其他的方法。我的解决方案是使用两个string来保存数字,然后再模拟两个数字相加的情况。最后再输出。#include <iostream>#include <string>#include <algorithm>using namespace std;int main(){ string a,b,c="";

2020-05-31 18:03:43 411 1

原创 筛法求素数

实际上,除了对每一个素数进行单点判定的方法外,筛法也可以快速的求出大规模的素数。例如 2是素数,那么所有以2为倍数的数字(例如4 6 8 10 12等等)肯定都不是素数了。那么我们需要做的就是从2开始筛选,直到筛选出题目要求的所有的素数即可。先输入两个数字M和N(M < N),然后就输出M和N之间的所有的素数。#include <iostream>using namespace std;const int maxn = 110;bool prime[maxn] = {fals

2020-05-31 16:49:51 457

原创 基于单点判定的方法来判定素数

素数指的就是,该数不可以被除了该数本身和1其他的数整除。本方法对每一个数都进行了判定。先输入数字N,然后再数入N个数字,每次输入一个数字,都判定该数字是不是素数。如果是素数,就输出YES,否则输出NO。#include <iostream>#include <cmath>using namespace std;bool is_prime(int n){ if(n <= 1) return false; int sqr = (int)sqrt(n*1.

2020-05-31 16:30:22 109

原创 基于辗转相除法求最小公倍数

先输入m和n,则先求出m和n的最大公约数,再令m和n的乘积除以最大公约数,所得即为最小公倍数。#include <iostream>#include <algorithm>using namespace std;int gcd(int a,int b){ if(b == 0) return a; else return gcd(b,a % b);}int main(){ int m,n; cin >> m >> n;

2020-05-31 16:07:23 915 2

原创 辗转相除法实现求两个数的最大公约数

使用辗转相除法来实现求两个数的最大公约数。只需要先输入两个数字,然后就能输出这两个数字的最大公约数。#include <iostream>#include <algorithm>using namespace std;int gcd(int a,int b){ if(b == 0) return a; else return gcd(b,a % b);}int main(){ int m,n; cin >> m >&gt

2020-05-31 16:01:33 577

原创 快速排序

快速排序的作用是,先将对一个区间的数据进行排序。使目前区间中某一个数的右边的所有数字全都比它小,左边的所有数字全都比它大。之后再对左边和右边两个区间实行这样的操作,知道数据区间内只有一个数字。在本代码中,选择区间中的第一个数字,使其区间经过排序后该数字的左边的所有数字都比该数字小,右边的所有数字都比该数字大。#include <iostream>using namespace std;const int maxn = 100;int A[maxn],n;int partitions(

2020-05-31 14:42:49 134

原创 归并排序的循环实现

归并排序的循环实现的原理和递归是一样的,只是把递归改成了循环。详情可戳:递归排序的递归实现代码如下:#include <iostream>#include <algorithm>using namespace std;const int maxn = 110;int n,one,A[maxn];void merges(int A[],int L1,int R1,int L2,int R2){ int i = L1,j = L2,temp[maxn],index

2020-05-31 14:08:59 531

原创 归并排序的递归实现

归并排序是一种很经典的算法。原理就是 把一个数组按照五五开的方式分成小块,然后再一个一个的归并起来。在归并的过程之中,也要保证两个区间内的数字在归并前的时候是有序的,并且在归并完成之后也是有序的。这样一直归并下去,直到数据的区间是数组头到数组尾。#include <iostream>#include <vector>using namespace std;vector<int> w;void merges(int L1,int R1,int L2,int R

2020-05-31 13:18:38 150

原创 快速幂

快速幂是快速解决a的b次方对m进行取模的问题。通常来说,求a的b次方对m的%,就是用一个循环,然后让a乘以自己,持续b次。但是在数据量太大的情况下,很可能会超时。所以就有了快速幂的方式。使用&的方式判定b所对应的二进制结尾(二进制代码最右边)是1还是0从而判断b是奇数还是偶数。再用b >>符号来让b右移1位,相当于抹去最右边的一位二进制。#include <iostream>using namespace std;typedef long long LL;LL

2020-05-29 21:32:57 185

原创 二分查找

二分查找算法是一种很简单的算法。可以很快的找出某一个数字的序号,但是需要注意的是二分查找只能在有序数组的基础上查找。先输入一个整数N,再输入N个整数,这N个整数就组成了一个数组。最后再输入M和M个数字,每次输入一个数字,都会输出这个数字在数组中的位置。输出位置的时候,默认的开始下标为0.#include <iostream>#include <algorithm>#include <vector>using namespace std;vector<i

2020-05-29 12:36:40 143

原创 基于全排列的N皇后暴力

N皇后是算法的经典问题,以下提供一种基于全排列的N皇后的解法。首先,N皇后的起始要求是指的是 不能有任意两个皇后是同行、同列、同一个斜排。所以可以很自然的联想到全排列来解决这个问题。例如,1 2 3的全排列有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1,3 1 2六种。它们可以看做是六种皇后摆放的位置描述。举个栗子,1 3 2 可以看做第一行第一列放置一个皇后,第二行第三列放置一个皇后,第三行第二列放置一个皇后。3 1 2也可以看做是第一行第三列放置一个皇后,第二行第一列放置一个皇后,第

2020-05-29 12:09:01 210

原创 全排列

很简单的全排列算法,基于vector和递归生成。首先输入一个数N,代表要排列的数的个数,再输入N个数。然后进行全排列并且输出。#include <iostream>#include <cstdio>#include <vector>#include <algorithm>using namespace std;const int maxn = 1010;int n,one,res[maxn];vector<int> p;bool

2020-05-29 11:47:21 128

原创 插入排序

很经典的插入排序算法。和选择排序一样,也很简单。把数组分为有序和无序两个部分,然后再将无序部分中的第一个数插入有序部分,使得有序部分仍然有序并且变大,无序部分变小。#include <iostream>#include <vector>using namespace std;vector<int> A;void insertSort(){ for(int i = 1;i < A.size();i ++){ int j = i,te

2020-05-28 10:01:17 96

原创 选择排序

非常简单的选择排序代码,使用vector实现。思路就是将数组分成无序和有序两个部分。然后每次在无序的部分中找到一个最小的值放在有序的部分中。时间复杂度为O(N^2),考场上建议直接使用sort()。#include <iostream>#include <vector>using namespace std;vector<int> res;void selectSort(){ for(int i = 0;i < res.size();i ++){

2020-05-28 09:39:55 126

原创 PAT B1009 说反话(使用stringstream解决)

原题目描述为:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Come输出样例:Come I Here World Hello题目思路:我看了很多大佬的代码

2020-05-28 09:25:31 170

原创 进制转换(支持十进制以上的情况)

基础的进制转换模板支持10进制以上,大于十进制的位数用大写字母表示首先 输入一个数字和其进制,就能输出其数字的十进制数。再输入一个十进制数字和其进制,就能输出其数字的进制数。第一次输入数字的时候,可以输入大写英文字母来表示大于10的数字。#include <iostream>#include <string>#include <sstream>#include <algorithm>using namespace std;void to_

2020-05-28 09:01:52 407 1

原创 PAT A1010 Radix(细节很多的一道题)

原题目描述为:Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.Now for any pair of positive integers N​1 and N​2 , your task is to find the radi

2020-05-08 23:08:09 227

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除