數字三角形 新增回文串 最短排序 字串通配

2021-07-22 08:39:26 字數 2605 閱讀 7377

一、數字三角形 

73 8

8 1 0

2 7 4 4

4 5 2 6 5

如上圖所示,從乙個數字三角形的頂部走到底部有很多條不同的路徑,規則是只能從當前節點走到下一層相鄰的節點,即下一層的左邊或右邊。例如第三行第二個數字「1」只能走到第四行的第二個數字「7」與第三個數字「4」。

請尋找最佳一條路徑,使得這條路徑上節點的數字總和最大。

輸入描述:

輸入包含多組。每組資料的第一行包含乙個正整數n(1≤n≤100),代表三角形的層數。

緊接著有n行數字,第i(1≤i≤n)行包含i個自然數。

輸出描述:

對應每組資料,輸出最大的和。

輸入例子:

5

73 8

8 1 0

2 7 4 4

4 5 2 6 5

輸出例子:

30
典型動態規劃
#include#includeusing namespace std;

int main()

sort(dp[n-1],dp[n-1]+n);//對最後一行進行排序

cout << dp[n - 1][n - 1] << endl;//輸出最大值

} return 0;

}

二、新增回文串對於乙個字串,我們想通過新增字元的方式使得新的字串整體變成回文串,但是只能在原串的結尾新增字元,請返回在結尾新增的最短字串。

給定原字串a及它的長度n,請返回新增的字串。保證原串不是回文串。

測試樣例:

"ab",2
返回:"a"
每次刪除掉第乙個字元,將這個刪除掉的字元放入乙個新串中;如果刪除後的字串是回文串則返回,否則繼續第一步;

逆序ans返回

**如下

#include#include #include#include using namespace std;

bool isp(string s)

string cs(string s,int n)

reverse(s1.begin(),s1.end());//反轉字串返回

return s1;

}int main()

三、最短排序

對於乙個無序陣列a,請設計乙個演算法,求出需要排序的最短子陣列的長度。

給定乙個整數陣列a及它的大小n,請返回最短子陣列的長度。

測試樣例:

[1,5,3,4,2,6,7],7
返回:4

[1,2,10,1,8,9],6 

返回:5

舉個例子[1,5,3,4,2,6,7] 我們需要排序的範圍是5到2之間,這裡我們可以找出5和2的特徵。2是從左向右遍歷最後乙個小於(它的左邊部分最大值)的數字。然後是5,5是從右向左遍歷最後乙個大於它(右邊部分最小值)的數字。通過上面的分析我們可以得到結論,從而找出這兩個的位置然後相減在加上1就得到了我們的答案。

#include#include #include#include using namespace std;

int shortsort(int *a,int n)

else max = a[i];

} if (n1 == -1)return 0;//如果n1的值未變則說明排序有序

int m = -1;

int min = a[n - 1];

for (int i = n - 2; i >= 0; i--)

else min = a[i];

} return n1 - m + 1;

}int main()

; cout << shortsort(a,6) << endl;

return 0;

}

四、字串通配
對於字串a,其中絕對不含有字元』.』和』*』。再給定字串b,其中可以含有』.』或』*』,』*』字元不能是b的首字元,並且任意兩個』*』字元不相鄰。exp中的』.』代表任何乙個字元,b中的』*』表示』*』的前乙個字元可以有0個或者多個。請寫乙個函式,判斷a是否能被b匹配。

給定兩個字串a和b,同時給定兩個串的長度lena和lenb,請返回乙個bool值代表能否匹配。保證兩串的長度均小於等於300。

測試樣例:

"abcd",4,".*",2

返回:true

#include#include #include#include using namespace std;

bool chkwildmatch(string a, int lena, string b, int lenb)

if (a[j] == b[i] || b[i] == '.')

else if (b[i] == '*')

else if (a[j] == b[i + 1])

} }if (j >= lena)

else

return false;

}int main()

數字三角形

題目描述 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 25 三角形中的數字為整數 1000 輸入第一行為n,表示有n行 後面n行表示三角形每條路的路徑權 輸出路徑所經過的數字的總和最大的答案 樣...

數字三角形

description 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,...

數字三角形

3 8 8 1 0 2 7 4 4 4 5 2 6 5 上圖給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。input 1 5 7 3 8 8 1 0 2 7 4 4 4 ...