日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-3 符号三角形 (10 分)(思路+详解)

發布時間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-3 符号三角形 (10 分)(思路+详解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:題目 Come 寶 !!!


輸入格式:
第一行符號個數n

輸出格式:
符合要求的三角形個數

輸入樣例:

4

結尾無空行
輸出樣例:

6

二:思路

思路:
1.如果我們確立的第一行的符號是什么 ,那么我們就可以基本上確定我們的符號三角形是什么
因為當第一行確定的時候,那么接下來的行就是按照同號為’+’ ,異號為’-’,來填寫
2.在這里我們選擇的解的空間是子集樹(因為我們樹每次要么是’-’,要么就是’+’)

3.具體步驟
1>:遞歸函數的參數
backtacking()

2>:輸出的 結果
vector<vector > ans;用來存每次的可行解
vector path; 用來記錄一次的可行解

3>:橫向單層for循環 和 縱向的遞歸
橫向的單層for循環為 0 和 1(這里我們用0和1代表’+‘和’-’)
縱向的遞歸為我們的n層結構

4>:遞歸終止條件為path.size() == n

4.當我們求出所有的可行解,我們要對其做出處理,因為我們只是窮舉了第一行的所有數據
所以我們的得補充完整個二維矩陣的樣子,那么我們補充的原則是,2個同號下面都是“+”,2個異號下面都是“-”。

5.當得到一個完整的圖形后我們要判斷 0 和 1的個數時候相等 ,如果相等則計數,就是符合要求的
符號三角形

6:圖示例

三:上碼

/**思路:1.如果我們確立的第一行的符號是什么 ,那么我們就可以基本上確定我們的符號三角形是什么因為當第一行確定的時候,那么接下來的行就是按照同號為'+' ,異號為'-',來填寫 2.在這里我們選擇的解的空間是子集樹(因為我們樹每次都是'-',要么是'-')3.具體步驟1>:遞歸函數的參數backtacking()2>:輸出的 結果vector<vector<string> > ans;用來存每次的可行解vector<int> path; 用來記錄一次的可行解 3>:橫向單層for循環 和 縱向的遞歸橫向的單層for循環為 0 和 1(這里我們用0和1代表'+'和'-')縱向的遞歸為我們的n層結構 4>:遞歸終止條件為path.size() == n4.當我們求出所有的可行解,我們要對其做出處理,因為我們只是窮舉了第一行的所有數據所以我們的得補充完整個二維矩陣的樣子,那么我們補充的原則是,2個同號下面都是“+”,2個異號下面都是“-”。5.當得到一個完整的圖形后我們要判斷 0 和 1的個數時候相等 ,如果相等則計數,就是符合要求的符號三角形 **/ #include<bits/stdc++.h> using namespace std;vector<vector<int> > ans; vector<int> path; int N;void backtacking(){if (path.size() == N) {ans.push_back(path);return;}for (int i = 0; i <= 1; i++) {path.push_back(i);backtacking();path.pop_back();} } int main(){int count = 0;cin >> N;backtacking();for (int i = 0; i < ans.size(); i++) {int array[N][N];//將每一次的可行解建立一個二維矩陣 memset(array, -1, sizeof(array));//初始化為-1; for (int j = 0; j < N; j++) {array[0][j] = ans[i][j];}for (int k1 = 1; k1 < N; k1++) {for (int k2 = 0; k2 < N - k1; k2++) {// N - k1 :因為這里是逐層遞減的 if (array[k1-1][k2] == array[k1-1][k2+1]) { //上一行的符號相同 array[k1][k2] = 0; //這里我們用0和1代表'+'和'-'}else{array[k1][k2] = 1;}}}int cnt1 = 0;int cnt2 = 0;for (int k3 = 0; k3 < N; k3++) {for (int k4 = 0; k4 < N; k4++) {if (array[k3][k4] == 0) {cnt1++;}if (array[k3][k4] == 1){cnt2++;}// cout << array[k3][k4] << ' '; } // cout << endl;}if (cnt1 == cnt2) {count++;}// cout << endl;} cout << count; }

寶!!!我再嘮叨一句 記得 加油喲!!!!! 沖!!!!!!!!!!!!!!!!!!!!!

總結

以上是生活随笔為你收集整理的7-3 符号三角形 (10 分)(思路+详解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。