數學題集合

數學題集合

注意

  1. 藍橋杯比賽,也可以寫個記事本寫思路。
  2. 在考場上的話,時間有限,我推薦同學們能想到正確的思路,就及時完成吧,畢竟過測試點拿分最重要,也沒人看代碼。能想到自己最簡單的思路即可。
  3. 第二種解法用python寫,這樣纔有挑戰性。
  4. 用數據結構來包裝輸入用例,尋找規律

思路

  1. 畫圖
    [

]
2. 步驟

一、907. 子數組的最小值之和

傳送門

https://leetcode-cn.com/problems/sum-of-subarray-minimums/

結題思路

題目輸入輸出幾變量包裝

給定一個整數數組 A,找到 min(B) 的總和,其中 B 的範圍爲 A 的每個(連續)子數組。

由於答案可能很大,因此返回答案模 10^9 + 7。

示例:

輸入:[3,1,2,4]
輸出:17
解釋:
子數組爲 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。
最小值爲 3,1,2,4,1,1,2,1,1,1,和爲 17。

特殊值的思考方法

算法步驟

思路1:使用單調棧的思想,實現一個單調棧:新建一個map,map的key爲數組的值,map的value爲遍歷到i位置爲止,遇到大於等於a[i]的個數;將map的value值存爲一個單調棧,最後的最小值之和爲單調棧的key*value的和值。
單調棧:單調棧指的是棧中存放的數據出棧應該是有序的,而不是輸入數組所有打印數據都是有序的
思路2:暴力法:第一個循環遍歷長度i,第二個循環遍歷內部取這i個數,其實也就是用i個循環,感覺有點不太好,也不知道能不能做出來

源代碼

#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <vector>
#include <map>
using namespace std;
int main()
{
	
	return 0;
} 

題型分析

知識點與模板代碼

二、1143. 最長公共子序列 = DP解決 + 狀態轉移方程 + 數據結構的初始化

傳送門

https://leetcode-cn.com/problems/longest-common-subsequence/

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

思路1:子序列的問題,一般用DP可以來解決;否則,要試用的子序列太多了。

  1. 用一個dp數組存儲,value爲截止到字符串1的第i個,字符串2的第j個爲止,最長的公共子序列。
  2. 如果找到相等的,則從左上角進行狀態轉移;如果不相等,則從左邊或上邊進行轉移。

源代碼

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
    	int len1 = text1.length();
    	int len2 = text2.length();
        int dp[len1+1][len2+1];
    	memset(dp, 0, sizeof(int)*(len1+1)*(len2+1));
		for(int i = 1; i <= len1; i++)
		{
			for(int j = 1; j <= len2; j++)
			{
				if(text1[i-1] == text2[j-1])
				{
					dp[i][j] = dp[i-1][j-1] + 1;
				}
				else
				{
					dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
				}
                cout << dp[i][j] <<" ";
			}
            cout << endl;
		}
        return dp[len1][len2];
    }
};

題型分析

  1. 可以用動態規劃的方法來解決,因爲子序列類型的問題,窮舉出所有的結果都不容易,只要涉及子序列問題,十有八九可以用DP來解決。
  2. 注意狀態轉移方程的特點:當字符串相等時,從左上角轉移;當不相等時,從左邊或上邊轉移。
  3. 打印數組結果。

知識點與模板代碼

int *dp;
int len1 = text1.length();
int len2 = text2.length();
memset(dp, 0, sizeof(int)*len1*len2);
for(int i = 1; i <= len1; i++)
{
    for(int j = 1; j <= len2; j++)
    {
        if(text1[i-1] == text[j-1])
        {
            dp[i][j] = dp[i-1][j-1] + 1;
        }
        else
        {
            dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
        }
    }
}

三、322. 零錢兌換

傳送門

https://leetcode-cn.com/problems/coin-change/

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

思路1:

源代碼

題型分析

  1. 動歸問題分兩種:一種可以用DP table的轉移來解決;另一種可用變化目標來解決。

知識點與模板代碼

四、劍指 Offer 54. 二叉搜索樹的第k大節點

傳送門

https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

思路1:使用前序遍歷的倒序來解決。

  1. 判斷k是否等於0,若是,返回根節點值;否則,進入2。
  2. dfs()傳入根節點。先判斷此節點是否爲空,爲空則直接return;否則,進入3。
  3. 遍歷此節點的右子節點,接着判斷–k是否等於,若等於0,則return root.val。
  4. dfs遍歷左節點。

源代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int res = 0;
	void dfs(TreeNode* root, int k)
	{
		if(root == nullptr || k == 0)
		{
			return;
		}
		dfs(root->right, k);
		if(--k == 0)
		{
			res = root->val;
            return;
		}
		dfs(root->left, k);
	}
    int kthLargest(TreeNode* root, int k) {
		dfs(root, k); 
        return res;
    }
};

題型分析

  1. 搜索二叉樹,前序遍歷的的判斷。

知識點與模板代碼

知識點與模板代碼


五、算法訓練 Rotatable Number

傳送門

http://lx.lanqiao.cn/problem.page?gpid=T629

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

思路1:

源代碼

題型分析

知識點與模板代碼

六、 復旦大學2020考研機試題 A.鬥牛

傳送門

https://blog.csdn.net/hyacinthhome/article/details/105952974/

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

思路1:暴力法,使用不等於號避免選到重複的元素

  1. 三個for循環,遍歷0-4。
  2. 用不等於號避免選到重複的元素。
  3. 判斷其和是否等於10;若等於,則從數組中排除這幾個元素。

思路2:逆向思維,選兩個數;判斷剩餘的三個數是否和爲10。

  1. 兩個for循環,選兩個數;判斷剩餘的三個數是否和爲10。

源代碼

思路1:

#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int b[2];
int cal(int i, int j, int k, int *a)
{
	int v = 0;
	cout << "111" << endl;
	for(int p = 0; p < 5; p++)
	{
		if(i != p && p != k && p != k)
		{
			b[v++] = a[p];
			cout << "a[p]:" << a[p] << endl;
		}
	}
	if(v == 2)
	{
		return 1;
	}
}
int main()
{
	int n, sum;
	int *a;
	cin >> n;
	a = (int *)calloc(0, sizeof(int)*5*n);
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < 5; j++)
		{
			cin >> a[i];
		}
		int ret = -1;
		for(int i = 0; i < 5; i++)
		{
			for(int j = 0; j < 5; j++)
			{
				for(int k = 0; k < 5; k++)
				{
					if(i != j && i != k && j != k && (a[i] + a[j] + a[k] == 10))
					{
						ret = cal(i, j, k, a);
					}
				}
			}
		}
		if(ret == 1)
		{
			for(int i = 0; i < 2; i++)
			{
				sum += b[i];
			}
		}
		cout << sum % 10 << endl; 
	}
	
	
	return 0;
} 

思路2:

題型分析

  1. 數組元素的選擇題,注意使用!=號除去相同的元素。
  2. 思路2是逆向思維,更加方便。
  3. 比賽中儘量用簡單的想法寫,它又不看你代碼,過了就行。

知識點與模板代碼

知識點與模板代碼


七、歷屆試題 小數第n位

傳送門

http://lx.lanqiao.cn/problem.page?gpid=T456

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

思路1:直接求:行不通,因爲double類型只能默認保存小數點後6位

  1. double類型相除,獲取到小數點的索引,再往後取相應位置的字符串。

思路2:模擬除法的過程,將餘數部分*10

  1. 取到餘數,餘數*10/除數爲第一個小數部分,更新餘數的值,for循環遍歷上述過程到第n次;當餘數等於a除b時,更新n=n%i。
  2. 再對此時的餘數值除三次,並輸出值。

源代碼

#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <string>
using namespace std;
int main()
{
	int n;
	int a, b, tmp;
	cin >> a >> b >> n ;
	tmp = a % b;
	for(int i = 1; i < n; i++)
	{
		tmp = tmp*10%b;
		if(tmp%b == a%b)
		{
			n %= i;
		}
	} 
	
	for(int i = 0; i < 3; i++)
	{
		cout << tmp*10/b;
		tmp = tmp*10%b;
	}
} 

題型分析

  1. 模擬題。模擬除法的操作。

知識點與模板代碼

八、 B.打地鼠

傳送門

https://blog.csdn.net/hyacinthhome/article/details/105952974

結題思路

題目輸入輸出幾變量包裝

給定 n 個整數 a1, a2, …, an 和⼀個 d,你需要選出若⼲個整數,使得將這些整數從⼩到⼤排好序之 後,任意兩個相鄰的數之差都不⼩於給定的 d,問最多能選多少個數出來。
【輸⼊格式】 第⼀⾏兩個整數 n,d (1<=n<=105, 0<=d<=109),分別表⽰整數個數和相鄰整數差的下界。 第⼆⾏ n 個整數 a1, a2, …, an (1<=ai<=10^9, 1<=i<=n),表⽰給定的 n 個整數。
【輸出格式】 僅⼀⾏⼀個整數,表⽰答案。
【樣例輸⼊】
6 2
1 4 2 8 5 7
[1 2 4 5 7 8]
【樣例輸出】

3

特殊值的思考方法

算法步驟

思路1:最基本的規律:只有把最小的數選出或者將最大的數選出,選出來的數纔是最多的。

  1. 將輸入的數組排序。
  2. 分兩種情況:第一種:首先將最小的數加入到容器中,再往後遍歷,當此數與容器的最後一個數差值大於d時,將其加入到容器中。第二種,首先將最大的數加入到容器中,再往前遍歷,當容器的最後一個數與此數的差值大於d時,將其加入到容器中
  3. 取兩個容器的size的較大值。

源代碼

#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int n, d;
	int *a;
	vector<int> v1, v2;
	cin >> n >> d;
	a = (int *)calloc(n, sizeof(int));
    for(int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
	sort(a, a+n);

	v1.push_back(a[0]);
    int index1 = 0;
	for(int i = 1; i < n; i++)
	{
		if(a[i]-v1[index1] >= d)
        {
            v1.push_back(a[i]);
            ++index1;
        }
	}
	cout << v1.size() << endl;
//    v2.push_back(a[n-1]);
//    int index2 = 0;
//	for(int i = n-2; i >= 0; i--)
//	{
//		if(v2[index2] - a[i] >= d)
//        {
//            v2.push_back(a[i]);
//            ++index2;
//        }
//	}
}

題型分析

  1. 排序添加模擬題。最基本的規律:只有把最小的數選出或者將最大的數選出,選出來的數纔是最多的。

1.vector的常見用法

  1. 對a中的從a.begin()(包括它)到a.end()(不包括它)的元素進行從小到大排列
    sort(a.begin(),a.end());
  2. 對a中的從a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素爲1,3,2,4,倒置後爲4,2,3,1
    reverse(a.begin(),a.end());
  3. 把a中的從a.begin()(包括它)到a.end()(不包括它)的元素複製到b中,從b.begin()+1的位置(包括它)開始複製,覆蓋掉原有元素
    copy(a.begin(),a.end(),b.begin()+1);
  4. 在a中的從a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
    find(a.begin(),a.end(),10);

九、C.排隊打飯

傳送門

https://blog.csdn.net/hyacinthhome/article/details/105952974/

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

輸入
人數
4
到 耗 等
[1 3 3]

[2 2 2]

[3 9 1]

[4 3 2]

不走的人打完飯的時間:tmp
4
1 3 3
2 2 2
3 9 1
4 3 2
輸出
1 4 -1 6

算法步驟

思路1:用一個數組存儲每個人走不走,默認值爲-1,若不走,則初始化其值爲等待的時間。

  1. 從第一個人開始遍歷每個人的打飯時間,根據下一個人的到達+等待時間是否大於上一個人的到達+消耗時間;判斷此人是否在留在這裏打飯。
  2. 若留在這裏打飯,則更新tmp值與數組。

源代碼

#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int main()
{
	int n;
	int **a, *b;
	cin >> n;
	a = new int* [n]; 
	for (int i = 0; i < n; i++)
	{
		a[i] = new int[3]; 
	}
	int tmp = 0;
	b = (int *)calloc(n, sizeof(int));
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < 3; j++)
		{
			cin >> a[i][j];
		}
	}
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < 3; j++)
		{
			if(a[i][0]+a[i][2] >= tmp)
			{
				b[i] = 	tmp > a[i][0] ? tmp : a[i][0];
				tmp = max(tmp, a[i][0]) + a[i][1];
			}
		}
	}
	for(int i = 0; i < n; i++)
	{
		cout << b[i] << endl;
	} 
	return 0;
} 

題型分析

  1. 模擬題。需要判斷是否落在特定的時間段內。
  2. 爲二維數組初始化,先new 一個一維的數組,再在每個一維數組中,new一個長度爲3的數組。
int **a;
cin >> n;
a = new int* [n]; 
for (int i = 0; i < n; i++)
{
    a[i] = new int[3]; 
}

模板

int **p = new int*[m];  //m行n列型
for (i = 0; i < m; ++i) {
  p[i] = new int[n];
  for (j = 0; j < n; ++j)
  scanf ("%d",&p[i][j]);
}

知識點與模板代碼

十、D.二叉搜索樹

傳送門

https://blog.csdn.net/hyacinthhome/article/details/105952974/

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

輸入
5

2 3 5 1 4
思路1:

算法步驟

源代碼

題型分析

知識點與模板代碼

知識點與模板代碼


十一、相隔天數

傳送門

https://blog.csdn.net/qq_38277212/article/details/105347119
輸入日期格式:YYYYMMDD,求與20190205相隔天數。

結題思路

題目輸入輸出幾變量包裝

輸入:
20190208
輸出:
3

特殊值的思考方法

20180105

算法步驟

思路1:

  1. 先計算20190205是2019年的第幾天。
  2. 再輸入的年份還剩餘多少天。
  3. 遍歷輸入年份到2019年,閏年爲366,平年爲365,累加起來。
  4. 判斷輸入的年份是<2019年,還是在2019初到20190205之間;還是20190205到2020之間;還是2020年之後。分四種情況進行討論。

思路2:以00000000年作爲參考年份,計算輸入年份到00000000的天數;20190205到00000000的天數;相減即可。

源代碼

思路2:

# 201902052019年第36天
b = input()
days1 = 0
days2 = 0
for i in range(2019):
	if(i % 4 == 0 and i % 100 != 0):
			days1 += 366
	elif(i % 400 == 0):
		days1 += 366
	else:
		days1 += 365
days1 += 36
nian = int(b[0:4])
if b[4] == '0':
	yue = int(b[5])
else:
	yue = int(b[4:5])
if b[6] == '0':
	ri = int(b[7])
else:
	ri = int(b[6:7])
dayue = [1, 3, 5, 7, 8, 10, 12]
xiaoyue = [2, 4, 6, 9, 11]
tianshuRunnian = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
tianshuPingnian = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
for i in range(nian):
	if(i % 4 == 0 and i % 100 != 0):
			days2 += 366
	elif(i % 400 == 0):
		days2 += 366
	else:
		days2 += 365
if yue in dayue:
	for i in range(yue):
		days2 += tianshuRunnian[i]
if yue in xiaoyue:
	for i in range(yue-1):
		days2 += tianshuPingnian[i]
days2 += ri
print(days2-days1)

題型分析

  1. 常規模擬題。比較妙的地方是,可以引入一個參考時間,如0年0月0日,作參考,用兩個日期與此參考時間的差值作爲解。

知識點與模板代碼

閏年:

  1. 普通閏年:能被4整除不能被100整除,如1900不是。
  2. 世紀閏年:能被400整除。

十二、最大連續子序列

傳送門

https://blog.csdn.net/qq_38277212/article/details/105347563

結題思路

題目輸入輸出幾變量包裝

輸入:
6
-2 11 -4 13 -5 -2

輸出:
20

特殊值的思考方法

算法步驟

  1. 新建一個dp數組,val爲帶index爲止的最大連續子序列;因爲要求是連續序列,所以狀態轉移方程爲:上一個值加上a[i],與單獨的a[i]的最大值。max(dp[i-1]+a[i],a[i])。

源代碼

n = int(input())
a = [int(i) for i in input().split()]
dp = [0]*n
dp[0] = a[0]
res = 0
for i in range(1, n):
    dp[i] = max(dp[i-1] + a[i], a[i])
print(max(dp))

題型分析

1.動態規劃經典題。

知識點與模板代碼


十三、有向樹形態

傳送門

https://blog.csdn.net/qq_38277212/article/details/105348818

結題思路

思路1:

題目輸入輸出幾變量包裝

輸入:
1:1
2:3
3:5
4:12
5

[1]
輸出:
5

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼

十四、9位ISBN,求其校驗位

傳送門

https://blog.csdn.net/qq_38277212/article/details/105354167

結題思路

題目輸入輸出幾變量包裝

輸入1:
2-02-033598
輸出1:
2-02-033598-0
輸入2:
7-309-04547
輸出2:
7-309-04547-5

特殊值的思考方法

算法步驟

思路1:模擬題
1.

源代碼

a = input()
b = []
sum = 0
i = 10
for i in range(len(a)):
    if(isinstance(a[i], int)):
        sum += a[i]*i
        i = i - 1
m = sum % 11
num = 11 - m
if num >= 1 and num <= 9:
    res = num
elif num == 10:
    res = "X"
elif num == 11:
    res = 0
# + 連接字符串;“,”用來輸出連續兩個變量
print(a + "-" + str(res))

題型分析

知識點與模板代碼

十五、中位數

傳送門

https://blog.csdn.net/qq_38277212/article/details/105353860

結題思路

題目輸入輸出幾變量包裝

輸入:
5
2 1 4 3 5
輸入:
3

特殊值的思考方法

算法步驟

思路1:使用sort函數進行排序,然後分奇偶數輸出就好了!

源代碼

n = int(input())
a = [int(i) for i in input().split()]
a.sort()
len = len(a)
if len % 2 == 0:
    print((a[len/2]+a[len/2-1])/2)
else:
    print(a[int((len-1)/2)])

題型分析

知識點與模板代碼

十六、字符串的哈夫曼編碼長度

傳送門

https://blog.csdn.net/qq_38277212/article/details/105061306

結題思路

題目輸入輸出幾變量包裝

問題描述:
給定一個字符串(長度不超過100),求哈夫曼編碼的最短長度

樣例輸入:
樣例1:
輸入:

abbcccdddd
輸出:

19
樣例2:
輸入:

we will we will r u
輸出:

50

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼

知識點與模板代碼


十七、字符串的修改

傳送門

http://code.mooctest.net/#/exercise/edit/4608/2986?from=mooctest

結題思路

題目輸入輸出幾變量包裝

題目描述
依舊是字符串處理,設A和B是兩個字符串。我們要用最少的字符操作次數,將字符串A轉換爲字符串B。這裏所說的字符操作共有三種:

刪除一個字符;
插入一個字符;
將一個字符改爲另一個字符。 對任給的兩個字符串A和B,計算出將字符串A變換爲字符串B所用的最少字符操作次數。
輸入描述
第一行爲字符串A;第二行爲字符串B;字符串A和B的長度均小於200。
輸出描述
只有一個正整數,爲最少字符操作次數。
測試樣例
輸入
sfdxbqw
gfdgw
輸出
4

特殊值的思考方法

[sfdxbqw]
[gfdgw]

[abcd]
[abc]

算法步驟

思路1:首先找到兩個字符串連續相等最長的那一段,再從這一段出發向目標字符串改變。

  1. 用一個遞歸函數匹配兩個字符串的某一位置,分三種情況進行處理:若某一個位置相等,兩個字符串的索引同時向後移;若不相等,則兩個字符串的索引交替變換往後移。
  2. 記錄連續相等的字符串的長度和其開始的索引。
  3. 從2中記錄的索引開始變換字符串。

思路2:用一個dp二維表,其表示,匹配到字符串1的i位置與字符串2的j位置,目前匹配到的最長

源代碼

題型分析

知識點與模板代碼


十八、字符串的哈夫曼編碼長度

傳送門

https://blog.csdn.net/weixin_35093872/article/details/88055475

結題思路

題目輸入輸出幾變量包裝

問題描述:
給定一個字符串(長度不超過100),求哈夫曼編碼的最短長度

樣例輸入:
輸入1:
abbcccdddd

輸出1:
19

輸入2:
we will we will r u

輸出2:
50

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


十九、後綴表達式求值

傳送門

https://blog.csdn.net/qq_38277212/article/details/105009387

結題思路

題目輸入輸出幾變量包裝

問題描述:
給定一個後綴序列,要求求值,只有加減

樣例輸入:
輸入:

123++4-
輸出:

2

特殊值的思考方法

算法步驟

思路1:計算後綴表達式:遍歷數組,遇到數字則將其入棧,遇到一個運算符則用此符計算棧的最上面兩個數,計算完後將結果入棧。最後棧頂元素即是結果。

  1. 入棧,判斷,計算即可。

源代碼

#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <string>
#include <vector>
#include <stack> 
using namespace std;
int main()
{
	string a;
    stack<int> st;
    cin >> a;
    int len1 = a.length();
    st.push(a[0]);
    for(int i = 0; i < len1; i++)
    {
        if(isdigit(a[i]))
        {
            st.push(a[i]-'0');
        }
        else if(a[i] == '+')
        {
            int num1 = st.top();
            st.pop();
            int num2 = st.top();
            st.pop();
            int res = num1 + num2;
            st.push(res);
        }
        else if(a[i] == '-')
        {
            int num1 = st.top();
            st.pop();
            int num2 = st.top();
            st.pop();
            int res = num2 - num1;
            st.push(res);
        }
    }
    cout << st.top() << endl;
	return 0;
} 

題型分析

  1. 模擬題:新建一個棧計算後綴表達式。
  2. 注意棧的棧頂是st.top();st.pop()的返回值爲void。

知識點與模板代碼

後綴表達式

下面以(a+b)c爲例子進行說明:
(a+b)c的逆波蘭式爲ab+c,假設計算機把ab+c
按從左到右的順序壓入棧中,並且按照遇到運算符就把棧頂兩個元素出棧,執行運算,得到的結果再入棧的原則來進行處理,那麼ab+c的執行結果如下:
1)a入棧(0位置)
2)b入棧(1位置)
3)遇到運算符“+”,將a和b出棧,執行a+b的操作,得到結果d=a+b,再將d入棧(0位置)
4)c入棧(1位置)
5)遇到運算符“
”,將d和c出棧,執行d*c的操作,得到結果e,再將e入棧(0位置)
經過以上運算,計算機就可以得到(a+b)*c的運算結果e了。
逆波蘭式除了可以實現上述類型的運算,它還可以派生出許多新的算法,數據結構,這就需要靈活運用了。逆波蘭式只是一種序列體現形式。

判斷棧是否爲空
//判斷棧是否爲空
bool StackEmpty(SqStack S)
{
	if(S.top == -1)
	return true; //棧爲空
	else
	return false;
}
pop()的返回值爲void

傳送門

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


傳送門

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


傳送門

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


傳送門

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


傳送門

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


傳送門

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


傳送門

結題思路

題目輸入輸出幾變量包裝

特殊值的思考方法

算法步驟

源代碼

題型分析

知識點與模板代碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章