1.判斷IP地址是否屬於同一網段
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int mask1 = 0, mask2 = 0, mask3 = 0, mask4 = 0;
char ch;
string inputstr;
stringstream ss;
while (cin >> inputstr)
{
int ip1a = 0, ip1b = 0, ip1c = 0, ip1d = 0;
int ip2a = 0, ip2b = 0, ip2c = 0, ip2d = 0;
ss << inputstr;
ss >> mask1 >> ch >> mask2 >> ch >> mask3 >> ch >> mask4;
ss.clear();
cin >> inputstr;
ss << inputstr;
ss >> ip1a >> ch >> ip1b >> ch >> ip1c >> ch >> ip1d;
ss.clear();
cin >> inputstr;
ss << inputstr;
ss >> ip2a >> ch >> ip2b >> ch >> ip2c >> ch >> ip2d;
ss.clear();
if ((mask1 > 255 || mask1 < 0) || (mask2 > 255 || mask2 < 0) || (mask3 > 255 || mask3 < 0) || (mask4 > 255 || mask4 < 0)
|| (ip1a > 255 || ip1a < 0) || (ip1b > 255 || ip1b < 0) || (ip1c > 255 || ip1c < 0) || (ip1d > 255 || ip1d < 0)
|| (ip2a > 255 || ip2a < 0) || (ip2b > 255 || ip2b < 0) || (ip2c > 255 || ip2c < 0) || (ip2d > 255 || ip2d < 0))
cout << 1 << endl;
else if (((mask1 & ip1a) == (mask1 & ip2a)) && ((mask2 & ip1b) == (mask2 & ip2b)) && ((mask3 & ip1c) == (mask3 & ip2c)) && ((mask4 & ip1d) == (mask4 & ip2d)))
cout << 0 << endl;
else
cout << 2 << endl;
}
return 0;
}
2. 搜索矩陣
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main{
int N;
while (cin >> N){
vector<string> matrix(N);
for (size_t i = 0; i < N; i++)
{
cin >> matrix[i];
}
int M = matrix[0].size(); //N行M列
//初始化DP矩陣
vector<vector<int>> dp;
for (size_t i = 0; i < N; i++)
{
vector<int> dp_(M);
dp.push_back(dp_);
}
//初始化列
int maxsqlen = 0;
for (size_t i = 0; i < N; i++)
{
dp[i][0] = matrix[i][0] - '0';
if (dp[i][0] > maxsqlen)
maxsqlen = dp[i][0];
}
//初始化行
for (size_t i = 0; i < M; i++)
{
dp[0][i] = matrix[0][i] - '0';
if (dp[0][i] > maxsqlen)
maxsqlen = dp[i][0];
}
//求解DP
for (size_t i = 1; i < N; i++)
{
for (size_t j = 1; j < M; j++) {
if (matrix[i][j] == '1') {
dp[i][j] = min(min(dp[i - 1][j - 1], dp[i - 1][j]), dp[i][j - 1]) + 1;
maxsqlen = maxsqlen > dp[i][j] ? maxsqlen : dp[i][j];
}
}
}
cout << maxsqlen * maxsqlen << endl;
}
}
3.奧特曼打怪
#include <bits/stdc++.h>
using namespace std;
const int MAX = 60;
void walkup(int gird[MAX][MAX], int i, int j, int N, int tempAns, int& trueAns){
if(i == 0 && j == 0){
if(trueAns < tempAns){
trueAns = tempAns;
}
}
else if(i == 0){
if(gird[i][j] == 0){
walkup(gird, i, j-1, N, tempAns, trueAns);
}
else if(gird[i][j] == 1){
gird[i][j] = 0;
walkup(gird, i, j-1, N, tempAns+1, trueAns);
gird[i][j] = 1;
}
}
else if(j == 0){
if(gird[i][j] == 0){
walkup(gird, i-1, j, N, tempAns, trueAns);
}
else if(gird[i][j] == 1){
gird[i][j] = 0;
walkup(gird, i, j-1, N, tempAns+1, trueAns);
gird[i][j] = 1;
}
}
else{
if(gird[i][j] == 0){
walkup(gird, i-1, j, N, tempAns, trueAns);
walkup(gird, i, j-1, N, tempAns, trueAns);
}
else if(gird[i][j] == 1){
gird[i][j] = 0;
walkup(gird, i-1, j, N, tempAns+1, trueAns);
walkup(gird, i, j-1, N, tempAns+1, trueAns);
gird[i][j] = 1;
}
}
}
void walkdown(int gird[MAX][MAX], int i, int j, int N, int tempAns, int& trueAns){
if(i == N-1 && j == N-1){
if(gird[i][j] == 0){
walkup(gird, i-1, j, N, tempAns, trueAns);
walkup(gird, i, j-1, N, tempAns, trueAns);
}
else if(gird[i][j] == 1){
walkup(gird, i-1, j, N, tempAns+1, trueAns);
walkup(gird, i, j-1, N, tempAns+1, trueAns);
}
}
else if(i == N-1){
if(gird[i][j] == 0){
walkdown(gird, i, j+1, N, tempAns, trueAns);
}
else if(gird[i][j] == 1){
gird[i][j] = 0;
walkdown(gird, i, j+1, N, tempAns+1, trueAns);
gird[i][j] = 1;
}
}
else if(j == N-1){
if(gird[i][j] == 0){
walkdown(gird, i+1, j, N, tempAns, trueAns);
}
else if(gird[i][j] == 1){
gird[i][j] = 0;
walkdown(gird, i+1, j, N, tempAns+1, trueAns);
gird[i][j] = 1;
}
}
else{
if(gird[i][j] == 0){
walkdown(gird, i+1, j, N, tempAns, trueAns);
walkdown(gird, i, j+1, N, tempAns, trueAns);
}
else if(gird[i][j] == 1){
gird[i][j] = 0;
walkdown(gird, i+1, j, N, tempAns+1, trueAns);
walkdown(gird, i, j+1, N, tempAns+1, trueAns);
gird[i][j] = 1;
}
}
}
int main()
{
int gird[MAX][MAX];
int dp[MAX][MAX];
for(int i = 0; i < MAX; i++){
for(int j = 0; j < MAX; j++){
gird[i][j] = 0;
dp[i][j] = 0;
}
}
int N;
cin >> N;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
cin >> gird[i][j];
}
}
// 從上往下走
// for(int i = 0; i < N; i++){
// for(int j = 0; j < N; j++){
// if(gird[i][j] == 0){
// dp[i][j] = dp[i][j-1] > dp[i-1][j] ? dp[i][j-1] : dp[i-1][j];
// }
// else if(gird[i][j] == 1){
// dp[i][j] = dp[i][j-1] > dp[i-1][j] ? dp[i][j-1] : dp[i-1][j];
// dp[i][j]++;
// }
// else{
// dp[i][j] = -1;
// }
// }
// }
int tempAns = 0;
int trueAns = 0;
walkdown(gird, 0, 0, N, tempAns, trueAns);
cout << trueAns << endl;
return 0;
}
Reference
https://blog.csdn.net/weixin_43194305/article/details/105108814