模擬算法題練習(一)

模擬算法介紹:

模擬算法通過模擬實際情況來解決問題,一般容易理解但是實現起來比較復雜,有很多需要注意的細節,或者是一些所謂很“麻模“的東西。

模擬題一般不涉及太難的算法,一般就是由較多的簡單但是不好處理的部分組成的,考察選手的細心程度和整體思維邏輯。

一般為了使得模擬題寫的邏輯清晰一些,經常會寫比較多的小函數來幫助解題,例如int和string的相互轉換、回文串的判斷日期的轉換、各種特殊條件的判斷等等。

(一、掃雷)

用戶登錄

題目描述
在一個 n 行 m 列的方格圖上有一些位置有地雷,另外一些位置為空。請為每個空位置標一個整數,表示周圍八個相鄰的方格中有多少個地雷
輸入描述
輸入的第一行包含兩個整數 n,m。
第 2 行到第 n +1行每行包含 m 個整數,相鄰整數之間用一個空格分隔。如果對應的整數為 0,表示這一格沒有地雷。如果對應的整數為 1,表示這格有地雷。
其中,1 <= n,m <= 100 分鐘后還是在當天
輸出描述
輸出 n 行,每行 m 個整數,相鄰整數之間用空格分隔。
對于沒有地雷的方格,輸出這格周圍的地雷數量。對于有地雷的方格,輸出9。

輸入輸出樣例

輸入

3 4

0 1 0 0

1 0 1 0

0 0 1 0

輸出

2 9 2 1

9 4 9 2

1 3 9 2

思路:

首先開辟兩個二維數組mp和ans,mp用二維數組接收輸入樣例,ans來確定是否是雷或確定雷的數量。遍歷整個數組,判斷是否是雷(if(mp[i][j] == 1)),如果是,則ans=9;如果不是,遍歷周圍周圍八格是否有雷(if(mp[_i])[_j] == 1),如果是則ans++;

#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int mp[N][N], ans[N][N];int main()
{int n,m ;cin >> n >> m;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){cin >> mp[i][j];}}for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(mp[i][j] == 1){ans[i][j] = 9;}else{//遍歷周圍八格是否有雷,有雷則ans++for(int _i = max(1, i - 1); _i <= min(n, i + 1); ++_i){for(int _j = max(1, j - 1); _j <= min(m, j + 1); ++_j){if(mp[_i][_j]) ans[i][j]++;}}}}}for(int i = 1; i <= n; ++i){for(int j = 1; j <= m; ++j){cout << ans[i][j] << ' ';}cout << '\n';}return 0;
}

(二、灌溉)

用戶登錄

題目描述
小藍負責花園的灌溉工作。
花園可以看成一個n 行 m 列的方格圖形。中間有一部分位置上安裝有出水管。
小藍可以控制一個按鈕同時打開所有的出水管,打開時,有出水管的位置可以被認為已經灌溉好。
每經過一分鐘,水就會向四面擴展一個方格,被擴展到的方格可以被認為已經灌溉好。即如果前一分鐘某一個方格被灌溉好,則下一分鐘它上下左右的四個方格也被灌溉好。
給定花園水管的位置,請問 k分鐘后,有多少個方格被灌溉好?
輸入描述
輸入的第一行包含兩個整數 n,m。
第二行包含一個整數 t,表示出水管的數量。
接下來t行描述出水管的位置,其中第之行包含兩個數 r,c表示第,行第 c列有一個排水管。
接下來一行包含一個整數 k。
其中,1<= n,m<= 100,1<=t<= 10,1<=k<= 100。
輸出描述
輸出一個整數,表示答案。

輸入輸出示例

輸入:

3 6 2 2 2 3 4 1

輸出:

9

#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int a[N][N], b[N][N];int main()
{int n, m; cin >> n >> m;int t; cin >> t;while (t--){int x, y; cin >> x >> y;a[x][y] = 1;}int k; cin >> k;while (k--){for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j){if (a[i][j]){if (a[i][j])b[i][j] = b[i - 1][j] = b[i + 1][j] = b[i][j - 1] = b[i][j + 1] = 1;}}}}//將b復制回afor (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j){a[i][j] = b[i][j];}}int count;for (int i = 1; i <= n; ++i){for (int j = 1; j <= m; ++j){if (a[i][j] == 1)count++;}}cout << count;return 0;
}

(三、回文日期)

用戶登錄

題目描述
2020 年春節期間,有一個特殊的日期引起了大家的注意:2020年2月2日。因為如果將這個日期按“yyyymmdd”的格式寫成一個8位數是20200202,恰好是一個回文數。我們稱這樣的日期是回文日期。
有人表示 20200202 是“千年一遇”的特殊日子。對此小明很不認同,因為不到2年之后就是下一個回文日期:20211202即2021年12月2日。
也有人表示 20200202 并不僅僅是一個回文日期,還是一個 ABABBABA型的回文日期。對此小明也不認同,因為大約 100年后就能遇到下一個ABABBABA型的回文日期:21211212即2121年12月12日。算不上“千年一遇”, 頂多算“千年兩遇”。
給定一個8位數的日期,請你計算該日期之后下一個回文日期和下一個ABABBABA型的回文日期各是哪一天。
輸入描述
輸入包含一個八位整數 N,表示日期。
對于所有評測用例,10000101<N<89991231,保證 N 是一個合法日期的 8 位數表示。
輸出描述
輸出兩行,每行1個八位數。第一行表示下一個回文日期,第二行表示下一個 ABABBABA 型的回文日期。

輸入輸出樣例:

輸入:

20200202

輸出

20211202 21211212

有一說一這題大佬的題解是真的強

編寫這么幾個函數:

1、從int轉換為指定位數的string的函數

2、從string轉換為int的函數

3、判斷閏年的函數

4、判斷日期是否合法的函數
5、判斷字符串是否是回文的函數

6、判斷字符串是否是ABABBABA型回文的函數

#include<bits/stdc++.h>
using namespace std;// 將字符串轉換為數字
int s2i(string s)
{int res = 0;for (const auto& i : s)res = res * 10 + i - '0';// 通過字符與'0'的差值來得到對應的數字,并累加到結果中 return res;
}// 將整數轉換為指定寬度的字符串 
string i2s(int x, int w)
//   要被轉換的整數, 轉換的位數
{string res;while (x)res += (x % 10) + '0', x /= 10;// 取x的個位數,并轉換為字符,添加到結果字符串中,然后x除以10 while (res.length() < w)res += '0';// 當結果字符串的長度小于指定的位數時,循環執行reverse(res.begin(), res.end());return res;
}// 判斷是否為閏年  
bool isLeapYear(int year)
{return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}// 判斷日期是否合法
bool isok(int year, int month, int day)
{int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (isLeapYear(year))days[2] = 29;//閏年2月29天return day <= days[month];
}// 判斷是否為回文
bool isPa(string s)
{for (int i = 0; i < s.length() / 2; ++i){if (s[i] != s[s.length() - 1 - i])return false;如果前后字符不相等,則不是回文  }return true;
}//判斷是否是ABBA型回文
bool isPa2(string s)
{if (isPa(s))return false;return s[0] == s[2] && s[1] == s[3];
}int main()
{string s; cin >> s;int year = s2i(s.substr(0, 4)), month = s2i(s.substr(4, 2)), day = s2i(s.substr(6, 2));// 分割字符串為對應的年, 月, 日bool ans1 = false, ans2 = false;// 定義兩個標志變量,用于標記是否找到了回文和ABBA型日期  for (int i = year; i <= 9999; ++i)//遍歷年份{for (int j = 1; j <= 12; ++j)//遍歷月份{if (i == year && j < month)continue;// 如果是是當前年份且月份小于輸入的月份,則跳過  for (int k = 1; k <= 31; ++k)//遍歷天數{if (i == year && j == month && k <= day)continue;// 如果是當前年份且是當前月份且日小于等于輸入的日,則跳過 if (!isok(i, j, k))continue;// 如果不合法,則跳過string date = i2s(i, 4) + i2s(j, 2) + i2s(k, 2);// 如果還沒有找到回文日期且當前日期是回文,則輸出并標記已找到if (!ans1 && isPa(date)){cout << date << '\n';ans1 = true;}// 如果還沒有找到ABBA型日期且當前日期是ABBA型,則輸出并標記已找到if (!ans2 && isPa2(date)){cout << date << '\n';ans2 = true;}}}}return 0;
}

今天就先到這了!!!

看到這里了還不給博主扣個:
?? 點贊??收藏 ?? 關注!

你們的點贊就是博主更新最大的動力!
有問題可以評論或者私信呢秒回哦。

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

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

相關文章

【算法】最小生成樹—Prim算法與Kruskal算法

Prim算法和Kruskal算法都是解決最小生成樹問題的經典算法。最小生成樹是原圖的最小連通子圖&#xff0c;它包含原圖的全部結點&#xff0c;且保持圖連通的所有邊代價和最小。一個連通圖可能有多個最小生成樹。 一、Prim算法 含義 Prim算法&#xff0c;也被稱為普里姆算法&…

基于移動端的食堂助餐在線點餐配送系統 uniapp微信小程序

本文從管理員、老人、配送員、食堂商家的功能要求出發&#xff0c;養老助餐管理系統小程序中的功能模塊主要是實現老人、配送員、食堂商家、食堂大廳、預約選座、餐號信息、美食信息、美食訂單、訂單信息、訂單配送、訂單評價、老人食堂、下單信息、飲食分析。經過認真細致的研…

C語言可以干些什么?C語言主要涉及哪些IT領域?

C語言可以干些什么&#xff1f;C語言主要涉及哪些IT領域&#xff1f; 在開始前我有一些資料&#xff0c;是我根據網友給的問題精心整理了一份「C語言的資料從專業入門到高級教程」&#xff0c; 點個關注在評論區回復“888”之后私信回復“888”&#xff0c;全部無償共享給大家…

我在爭什么?

本來想寫一下2024項目部人員該怎么干&#xff0c;還沒有寫出來&#xff0c;大家內部就先動起來。針對現有情況做了分析&#xff1a; 作為項目人員&#xff08;實施&#xff0c;運維&#xff09; 需要有一定自我認識 認識清楚公司要什么&#xff1f; 認識清楚我自己要什么&…

內網安裝redis+部署redis-cluster集群

一、安裝redis redis安裝包下載地址&#xff1a; https://download.redis.io/releases/ 1.1 解壓編譯并創建數據目錄 tar xzvf redis-6.2.10.tar.gz -C /usr/local/ cd /usr/local/ mv redis-6.2.10/ redis cd /usr/local/redis/ make #編譯 …

Springboot整合SSE實現實時消息推送

SSE詳細介紹傳送門&#xff1a;SSE實時消息推送 簡單描述一下SSE推送在實際項目中應用的常見場景 1&#xff0c;項目頁面中有消息通知板塊&#xff0c;當信息有變化時&#xff0c;只有手動刷新頁面&#xff0c;才會看到最新的數據&#xff0c;這里可以采用SSE技術實時推送最新…

Docker技術概論(1):Docker與虛擬化技術比較

Docker技術概論&#xff08;1&#xff09; Docker與虛擬化技術比較 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…

深入解析Android-AutoLayout,2024安卓開發面試題及答案

前言 如果你也學習Android&#xff0c;那么你大概率會看過我的文章。經常有讀者給我留言&#xff1a;“該怎么學習Android&#xff1f;”、“日常學習Android的方法是什么”。 所以&#xff0c;今天&#xff0c;我將獻上一份《Android知識圖譜》&#xff0c;以自身的經驗 &…

ABAP 發送帶EXCEL郵件

前言 沒啥特殊需求&#xff0c;就是有個庫齡報表用戶想整郵件發送 實現 用的最簡單的XLS文件作為excel附件發送出去 觀察XLS文件的純文本格式&#xff0c;每列之間用TAB制表符分隔&#xff0c;每行之間用回車符分隔 思路也比較明確&#xff0c;在SAP中實現這種格式&#xf…

.Net利用Microsoft.Extensions.DependencyInjection配置依賴注入

一、概述 為了讓接口程序更加模塊化和可測試,采用依賴注入的方式調用接口方法。 二、安裝Microsoft.Extensions.DependencyInjection 在NuGet里面搜索Microsoft.Extensions.DependencyInjection,并進行安裝。 三、代碼編寫 3.1 創建Service 實現類 /*****************…

【跨境電商須知】FP獨立站的特點和痛點有哪些?

無論是做獨立站&#xff0c;還是做亞馬遜&#xff0c;都有各自的難點。自己做獨立站若要在跨境行業長足發展&#xff0c;既要知道FP獨立站有什么特點&#xff0c;要清楚FP獨立站的痛點并一一克服。 一、FP獨立站的特點 與依賴第三方平臺相比&#xff0c;擁有自己的域名、服務器…

Doccano 修復 spacy.gold 的bug

引言 最初只是想把Doccano標注的數據集轉換成BIO(類似conll2003數據集)的標注格式&#xff1b; 摘要 可先閱讀一下教程&#xff1a;【已解決】關于如何將Doccano標注的文本轉換成NER模型可以直接處理的CoNLL 2003格式 裝包:pip install doccano-transformer 報錯信息 運行…

Adam優化算法

Adam算法&#xff08;Adaptive Moment Estimation&#xff09;是一種用于深度學習模型優化的算法&#xff0c;它結合了動量&#xff08;Momentum&#xff09;和RMSprop&#xff08;Root Mean Square Propagation&#xff09;的概念。Adam算法自2015年提出以來&#xff0c;因其高…

【前端素材】推薦優質后臺管理系統DAdmin平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理網站、應用程序或系統的管理界面&#xff0c;通常由管理員和工作人員使用。它提供了訪問和控制網站或應用程序后臺功能的工具和界面&#xff0c;使其能夠管理用戶、內容、數據和其他各種功能。 2、功能需求 后臺管理系…

FreeCAD|讀取STEP、創建平面、相交、瓶子

FreeCAD是一個基于OpenCASCADE的開源CAD/CAE工具。OpenCASCADE是一套開源的CAD/CAM/CAE幾何模型核心&#xff0c;來自法國Matra Datavision公司&#xff0c;是著名的CAD軟件EUCLID的開發平臺。FreeCAD可運行于Windows以及Linux系統環境下&#xff0c;是一種通用的3D CAD建模工具…

記錄 關于navicat連接數據庫報錯1045的問題

重裝數據庫之后就連接不上了 報錯1045 而網上的解決方案大都是更改數據庫密碼&#xff0c;但是我在第一步就被卡住無法更改密碼&#xff0c;輸入指令也報錯&#xff0c;檢查的環境變量也沒錯&#xff0c;經過長時間的試錯終于找到解決了辦法 解決辦法 刪除data文件夾 如果無法…

積累:Qt 多種數據類型之間的轉換方法

前言 開發時經常涉及到數據類型的轉換&#xff0c;為方便溫故知新、提升開發效率&#xff0c;現將 Qt 開發部分常用的數據類型轉換方式形成工具文檔供查詢、參考。 1. int 轉 QString 1&#xff09;函數&#xff1a;QString::number 2&#xff09;函數原型 //將數字&#xff0…

LD: 利用Plink軟件進行連鎖不平衡計算和繪圖

輸入文件詳解 PLINK主要使用以下三種文件格式: .ped文件:文本文件,列出所有樣本的基因型數據。每行代表一個樣本,包含個體和家系信息,以及其對應的基因型數據。.map文件:文本文件,與.ped文件配合使用,列出了基因型數據中所有SNP的位置信息。每行代表一個SNP,包含染色…

Python:練習:輸出int值a占b的百分之幾。例如:輸入1和4,輸出:25%。

案例&#xff1a; 輸出int值a占b的百分之幾。例如&#xff1a;輸入1和4&#xff0c;輸出&#xff1a;25%。 思考&#xff1a; 所有的一步步思考&#xff0c;最后綜合起來。 首先&#xff0c;確定 輸出&#xff0c;那么就用input&#xff0c;而且是int值&#xff0c;所以肯定…

springboot2.6.5 下配置ForkJoinPool線程池大小

從java1.7開始&#xff0c;引入了parallelStream的方式使用ForkJoinPool多線程處理數據的方式&#xff0c;ForkJoinPool默認線程池大小是cpu內核數-1&#xff0c;并且可以通過以下方式配置線程池大小&#xff1a; System.setProperty("java.util.concurrent.ForkJoinPool…