【刷題筆記(編程題)05】另類加法、走方格的方案數、井字棋、密碼強度等級

在這里插入圖片描述

1. 另類加法

給定兩個int A和B。編寫一個函數返回A+B的值,但不得使用+或其他算數運算符。
測試樣例:
1,2
返回:3
示例 1
輸入
輸出

思路1:
二進制0101和1101的相加
0 1 0 1
1 1 0 1
其實就是
不帶進位的結果1000
和進位產生的1010相加
無進位加法: 兩個二進制數異或后得到的結果
就是它們無進位相加的結果
進位: 兩個二進制數按位與后左移1位
就是它們相加的進位結果
在每一輪計算中
利用異或運算符計算不進位部分
利用與運算符和左移運算符計算進位部分
并將進位部分賦值給另一個操作數
直到沒有進位為止
最終,不進位部分的結果即為加法的結果
在這里插入圖片描述

class UnusualAdd {
public:int addAB(int A, int B) {while (B) {int a = A ^ B;int b = (A & B) << 1; A = a;B = b;}return A;}
};

2. 走方格的方案數

請計算n*m的棋盤格子(n為橫向的格子數,m為豎向的格子數)從棋盤左上角出發沿著邊緣線從左上角走到右下角,總共有多少種走法,要求不能走回頭路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盤格之間的邊緣線行走
數據范圍:
輸入描述
輸入兩個正整數n和m,用空格隔開。(1≤n,m≤8)
輸出描述
輸出一行結果
示例 1
輸入
2 2
輸出
6

思路1: 遞歸
本題說的是沿著邊緣線走
而非在格子里面走
第一步可以往右或往下
起始路徑(0, 0)可以選擇沿著
(0+1, 0)和(0, 0+1)的路徑走
而(0+1, 0)和(0, 0+1)是起始路徑(0, 0)的子問題
繼續往下遞歸,用(i, j)表示當前位置
后續限制邊界的向下或向右
因為不能走回頭路
當向下(向右)走到邊界
表示只有向右(向下)這一條路徑可走
即可結束遞歸,無需完全走到右下角
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

#include <iostream>
using namespace std;int scheme(int i, int j, int n, int m)
{if (i == n || j == m)return 1;return scheme(i + 1, j, n, m) + scheme(i, j + 1, n, m);
}int main() {int n, m;while (cin >> n >> m) { cout << scheme(0, 0, n, m) << endl;}return 0;
}

思路2: 動態規劃
用dp[i][j]表示到第 i 行 j 列為止的路徑數
它等于到它左邊的路徑數
加上到它上邊的路徑數的總和
如果是首行或者首列路徑數為1
在這里插入圖片描述
(0, 0)到(0, 1)只有1條路徑
(0, 0)到(1, 0)也只有1條路徑
(0, 0)到(1, 1)的路徑等于
它左邊的路徑加上它上邊的路徑
(0, 0)到(0, 1)的路徑加上(0, 0)到(1, 0)的路徑
1 + 1 = 2

int main() {int n, m;while(cin >> n >> m){vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0)); //dp[i][j]表示到第i行j列為止的路徑數for(int i = 0; i <= n; i++)for(int j = 0; j <= m; j++){if(i == 0 && j == 0) //起始位置只有一條路徑dp[i][j] = 1;else if(i == 0) //起始行,等于左邊列的路徑dp[i][j] = dp[i][j - 1];else if(j == 0) //起始列,等于上邊行的路徑dp[i][j] = dp[i - 1][j];else //等于左邊加上邊的路徑dp[i][j] = dp[i][j - 1] + dp[i - 1][j];}cout << dp[n][m] << endl;}return 0;
}

3. 井字棋

給定一個二維數組board,代表棋盤,其中元素為1的代表是當前玩家的棋子,0表示沒有棋子,-1代表是對方玩家的棋子。當一方棋子在橫豎斜方向上有連成排的及獲勝(及井字棋規則),返回當前玩家是否勝出。
測試樣例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
示例 1
輸入
輸出

思路1:
先判斷兩個對角線
再for循環判斷橫縱

class Board {
public:bool checkWon(vector<vector<int> > board) {if (board[0][0] + board[1][1] + board[2][2] == 3|| board[0][2] + board[1][1] + board[2][0] == 3)return true;for (int i = 0; i < board.size(); i++) {if (board[i][0]+board[i][1]+board[i][2] == 3)return true;if (board[0][i]+board[1][i]+board[2][i] == 3)return true;}return false;}
};

4. 密碼強度等級

密碼按如下規則進行計分,并根據不同的得分為密碼進行安全等級劃分。
一、密碼長度:
5 分: 小于等于4 個字符
10 分: 5 到7 字符
25 分: 大于等于8 個字符
二、字母:
0 分: 沒有字母
10 分: 密碼里的字母全都是小(大)寫字母
20 分: 密碼里的字母符合”大小寫混合“
三、數字:
0 分: 沒有數字
10 分: 1 個數字
20 分: 大于1 個數字
四、符號:
0 分: 沒有符號
10 分: 1 個符號
25 分: 大于1 個符號
五、獎勵(只能選符合最多的那一種獎勵):
2 分: 字母和數字
3 分: 字母、數字和符號
5 分: 大小寫字母、數字和符號
最后的評分標準:
= 90: 非常安全
= 80: 安全(Secure)
= 70: 非常強
= 60: 強(Strong)
= 50: 一般(Average)
= 25: 弱(Weak)
= 0: 非常弱(Very_Weak)
對應輸出為:
VERY_SECURE
SECURE
VERY_STRONG
STRONG
AVERAGE
WEAK
VERY_WEAK
請根據輸入的密碼字符串,進行安全評定。
注:
字母:a-z, A-Z
數字:0-9
符號包含如下: (ASCII碼表可以在UltraEdit的菜單view->ASCII Table查看)
!"#KaTeX parse error: Can't use function '\]' in math mode at position 76: …I碼:0x3A~0x40) [\?]?^_` …@NoNoN
輸出
VERY_SECURE
說明
樣例的密碼長度大于等于8個字符,得25分;大小寫字母都有所以得20分;有兩個數字,所以得20分;包含大于1符號,所以得25分;由于該密碼包含大小寫字母、數字和符號,所以獎勵部分得5分,經統計得該密碼的密碼強度為25+20+20+25+5=95分。
示例 2
輸入
Jl)M:+
輸出
AVERAGE
說明
示例2的密碼強度為10+20+0+25+0=55分。

思路1:
用好 if 和 else
對每個安全等級進行判斷

#include <iostream>
using namespace std;int passwordLength(string& s) {if (s.size() >= 5 && s.size() <= 7)return 10;else if (s.size() >= 8)return 25;else return 5;
}int passwordLetter(string& s) {bool Capital = false, Lowercase = false;for (int i = 0; i < s.size(); i++) {if (s[i] >= 'A' && s[i] <= 'Z')Capital = true;else if (s[i] >= 'a' && s[i] <= 'z')Lowercase = true;}if (Capital == false && Lowercase == false)return 0;else if (Capital == true && Lowercase == true)return 20;else return 10;
}int passwordFigure(string& s) {int count = 0;for (int i = 0; i < s.size(); i++) {if (s[i] >= '0' && s[i] <= '9')count++;if (count > 1) return 20;}if (count == 0) return 0;else return 10;
}int passwordSymbol(string& s) {int count = 0;for (int i = 0; i < s.size(); i++) {if (s[i] >= 0x21 && s[i] <= 0x2F) count++;else if (s[i] >= 0x3A && s[i] <= 0x40) count++;else if (s[i] >= 0x5B && s[i] <= 0x60) count++;else if (s[i] >= 0x7B && s[i] <= 0x7E) count++;}if (count == 0) return 0;else if (count == 1) return 10;else return 25;
}int passwordAward(int Letter, int Figure, int Symbol) {if (Letter == 20 && Figure >= 10 && Symbol >=10)return 5;else if (Letter == 10 && Figure >= 10 && Symbol >=10)return 3;else if (Letter == 10 && Figure >= 10)return 2;else return 0;
}int main() {string s;cin >> s;int Length, Letter, Figure, Symbol, Award;Length = passwordLength(s);Letter = passwordLetter(s);Figure = passwordFigure(s);Symbol = passwordSymbol(s);Award = passwordAward(Letter, Figure, Symbol);int score = Length + Letter + Figure + Symbol + Award;if (score >= 90) cout << "VERY_SECURE" << endl;else if (score >= 80) cout << "SECURE" << endl;else if (score >= 70) cout << "VERY_STRONG" << endl;else if (score >= 60) cout << "STRONG" << endl;else if (score >= 50) cout << "AVERAGE" << endl;else if (score >= 25) cout << "WEAK" << endl;else if (score >= 0) cout << "VERY_WEAK" << endl;return 0;
}
class password {
public:password(string& s): _pwd(s){}void passwordLength() {if (_pwd.size() >= 5 && _pwd.size() <= 7)_score += 10;else if (_pwd.size() >= 8)_score += 25;else if (_pwd.size() <= 4) _score += 5;}void passwordLetter() {for (auto l : _pwd) {if (isupper(l)) _bigLetter = true;else if (islower(l))_smallLetter = true;}if (_bigLetter && _smallLetter)_score += 20;else if (_bigLetter || _smallLetter ) _score += 10;}void passwordFigure() {int count = 0;for (auto f : _pwd) {if (isdigit(f))  count++;}if (count >= 1) _Figure = true;if (count == 1) _score += 10;else if (count > 1) _score += 20;
}void passwordSymbol() {int count = 0;for (auto c : _pwd) {if (ispunct(c)) count++;}if (count >= 1) _Symbol = true;if (count == 1) _score += 10;else if (count > 1) _score += 25;}void passwordAward() {if (_bigLetter && _smallLetter && _Figure && _Symbol)_score += 5;else if ((_bigLetter || _smallLetter) && _Figure && _Symbol)_score += 3;else if ((_bigLetter || _smallLetter) && _Figure)_score += 2;}void getTotalScore() {passwordLength();passwordLetter();passwordFigure();passwordSymbol();passwordAward();}void _printGrade() {getTotalScore();if (_score >= 90) cout << "VERY_SECURE" << endl;else if (_score >= 80) cout << "SECURE" << endl;else if (_score >= 70) cout << "VERY_STRONG" << endl;else if (_score >= 60) cout << "STRONG" << endl;else if (_score >= 50) cout << "AVERAGE" << endl;else if (_score >= 25) cout << "WEAK" << endl;else if (_score >= 0) cout << "VERY_WEAK" << endl;}
private:string _pwd;int _score = 0;bool _bigLetter = false;bool _smallLetter = false;bool _Figure = false;bool _Symbol = false;
};int main() {string s;while (cin >> s) {password pwd(s);pwd._printGrade();}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41112.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41112.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41112.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ssm校園志愿服務信息系統-計算機畢業設計源碼97697

摘 要 隨著社會的進步和信息技術的發展&#xff0c;越來越多的學校開始重視志愿服務工作&#xff0c;通過組織各種志愿服務活動&#xff0c;讓學生更好地了解社會、服務社會。然而&#xff0c;在實際操作中&#xff0c;志愿服務的組織和管理面臨著諸多問題&#xff0c;如志愿者…

dledger原理源碼分析系列(一)-架構,核心組件和rpc組件

簡介 dledger是openmessaging的一個組件&#xff0c; raft算法實現&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何實現raft概念&#xff0c;以及dledger在rocketmq的應用 本系列使用dledger v0.40 本文分析dledger的架構&#xff0c;核心組件&#xff1b;rpc組…

【pytorch16】MLP反向傳播

鏈式法則回顧 多輸出感知機的推導公式回顧 只與w相關的輸出節點和輸入節點有關 多層多輸入感知機 擴展為多層感知機的話&#xff0c;意味著還有一些層&#xff08;理解為隱藏層σ函數&#xff09;&#xff0c;暫且設置為 x j x_{j} xj?層 對于 x j x_{j} xj?層如果把前面的…

迅捷PDF編輯器合并PDF

迅捷PDF編輯器是一款專業的PDF編輯軟件&#xff0c;不僅支持任意添加文本&#xff0c;而且可以任意編輯PDF原有內容&#xff0c;軟件上方的工具欄中還有豐富的PDF標注、編輯功能&#xff0c;包括高亮、刪除線、下劃線這些基礎的&#xff0c;還有規則或不規則框選、箭頭、便利貼…

【護眼小知識】護眼臺燈真的護眼嗎?防近視臺燈有效果嗎?

當前&#xff0c;近視問題在人群中愈發普遍&#xff0c;據2024年的統計數據顯示&#xff0c;我國兒童青少年的總體近視率已高達52.7%。并且近視背后潛藏著諸多眼部并發癥的風險&#xff0c;例如視網膜脫離、白內障以及開角型青光眼等&#xff0c;嚴重的情況甚至可能引發失明。為…

PMP--知識卡片--波士頓矩陣

文章目錄 記憶黑話概念作用圖示 記憶 一說到波士頓就聯想到波士頓龍蝦&#xff0c;所以波士頓矩陣跟動物有關&#xff0c;狗&#xff0c;牛。 黑話 你公司的現金牛業務&#xff0c;正在逐漸變成瘦狗&#xff0c;應盡快采取收割策略&#xff1b;問題業務的儲備太少&#xff0…

必須掌握的Linux的九大命令

ifconfig 命令用于配置和查看網絡接口的參數。 ping 命令用于測試主機之間的網絡連通性。 telnet用于通過Telnet協議連接到遠程主機。 telnet 127.0.0.1 8000 telnet example.com telnet example.com 8080 iostat 命令用于報告 CPU 統計信息和 I/O 設備負載。 iostat&…

護眼熱點:臺燈護眼是真的嗎?一起來看臺燈的功能作用有哪些

如今近視問題日益嚴峻&#xff0c;尤為引人矚目的是&#xff0c;高度近視學生群體占比已逼近10%的警戒線&#xff0c;且這一比例伴隨著學齡的增長而悄然攀升——從幼兒園6歲孩童中那令人憂慮的1.5%&#xff0c;到高中階段驚人的17.6%&#xff0c;每一組數據都敲響了保護兒童視力…

【Linux】靜態庫的制作和使用詳解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;個人主頁 &#xff1a;阿然成長日記 …

代碼隨想錄算法訓練營第71天:路徑算法[1]

代碼隨想錄算法訓練營第71天&#xff1a;路徑算法 ? bellman_ford之單源有限最短路 卡碼網&#xff1a;96. 城市間貨物運輸 III(opens new window) 【題目描述】 某國為促進城市間經濟交流&#xff0c;決定對貨物運輸提供補貼。共有 n 個編號為 1 到 n 的城市&#xff0c…

【CT】LeetCode手撕—4. 尋找兩個正序數組的中位數

目錄 題目1- 思路2- 實現?4. 尋找兩個正序數組的中位數——題解思路 3- ACM 實現 題目 原題連接&#xff1a;4. 尋找兩個正序數組的中位數 1- 思路 思路 將尋找中位數 ——> 尋找兩個合并數組的第 K 大 &#xff08;K代表中位數&#xff09; 實現 ① 遍歷兩個數組 &am…

企業級監控系統Zabbix

文章目錄 Zabbix介紹Zabbix架構Zabbix serverZabbix agentZabbix proxy Zabbix Server的安裝Zabbix Agent的安裝監控主機流程zabbix_get自定義模板和監控項實戰用戶登錄數監控1.指定監控項命令2.重啟Agent服務3.在Server上創建監控項4.測試監控項5.查看監控項圖形 觸發器定義觸…

外泌體相關基因肝癌臨床模型預測——2-3分純生信文章復現——4.預后相關外泌體基因確定單因素cox回歸(2)

內容如下&#xff1a; 1.外泌體和肝癌TCGA數據下載 2.數據格式整理 3.差異表達基因篩選 4.預后相關外泌體基因確定 5.拷貝數變異及突變圖譜 6.外泌體基因功能注釋 7.LASSO回歸篩選外泌體預后模型 8.預后模型驗證 9.預后模型魯棒性分析 10.獨立預后因素分析及與臨床的…

【若依】關閉當前標簽頁并跳轉路由到其他頁面

使用場景如&#xff1a;當在新增/編輯路由頁面提交成功后&#xff0c;需要關閉當前頁&#xff0c;并跳轉回列表頁。 實現代碼&#xff1a; this.$store.dispatch("tagsView/delView", this.$route); //關閉當前頁 this.$router.replace({ path: "/xxx/xxx"…

【經驗總結】Springboot打印指定類的日志到指定文件中

原文地址&#xff1a;https://www.cnblogs.com/zeng1994/p/f9bff238b13a0bf8fb8bf88c41db7a34.html 以下內容已經過實踐&#xff0c;勘誤&#xff0c;總結 環境&#xff1a;Springboot2.5.2 公司有個項目&#xff0c;需要和幾個第三方系統對接。這種項目&#xff0c;日志一定要…

香橙派 AIpro 根據心情生成專屬音樂

香橙派 AIpro 根據心情生成專屬音樂 一、OrangePi AI pro 開發版參數介紹1.1 接口簡介1.2 OrangePi AI pro 的Linux系統功能適配情況1.3 開發板開機1.4 遠程連接到 OrangePi AIpro 二、開發環境搭建2.1 創建環境、代碼部署文件夾2.2 安裝 miniconda2.3 為 miniconda 更新國內源…

生態系統NPP及碳源、碳匯模擬技術教程

原文鏈接&#xff1a;生態系統NPP及碳源、碳匯模擬技術教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608293&idx3&sn2604c5c4e061b4f15bb8aa81cf6dadd1&chksmfa826602cdf5ef145c4d170bed2e803cd71266626d6a6818c167e8af0da93557c1288da21a71&a…

【綜合能源】計及碳捕集電廠低碳特性及需求響應的綜合能源系統多時間尺度調度模型

目錄 1 主要內容 2 部分程序 3 實現效果 4 下載鏈接 1 主要內容 本程序是對《計及碳捕集電廠低碳特性的含風電電力系統源-荷多時間尺度調度方法》方法復現&#xff0c;非完全復現&#xff0c;只做了日前日內部分&#xff0c;并在上述基礎上改進升級為電熱綜合電源微網系統&…

vue+openlayers之幾何圖形交互繪制基礎與實踐

文章目錄 1.實現效果2.實現步驟3.示例頁面代碼3.基本幾何圖形繪制的關鍵代碼 1.實現效果 繪制點、線、多邊形、圓、正方形、長方形 2.實現步驟 引用openlayers開發庫。加載天地圖wmts瓦片地圖。在頁面上添加幾何圖形繪制的功能按鈕&#xff0c;使用下拉列表&#xff08;sel…

程序員績效管理-進一步思考

工時管理也好、項目管理&#xff08;軟件項目&#xff09;也好&#xff0c;市面上已經很多了&#xff0c;你做這個和他們區別何在&#xff1f;大的公司一般都自己做&#xff0c;誰又為你買單&#xff1f;根據目前的反饋&#xff0c;主要的疑問就是這兩個問題。 進一步思考如下&…