NO.24十六届蓝桥杯备战|二维数组八道练习|杨辉三角|矩阵(C++)
P5732 【深基5.习7】杨辉三角 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<vector<int>> a(n, vector<int> (n));
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
if (j == 0)
{
a[i][j] = 1;
}
if (j == i)
{
a[i][j] = 1;
}
if (i >= 2 && j >= 1)
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
cout << a[i][j] << ' ';
}
cout << '\n';
}
return 0;
}
合并成一次遍历
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<vector<int>> a(n, vector<int> (n));
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
if (j == 0)
{
a[i][j] = 1;
}
if (j == i)
{
a[i][j] = 1;
}
if (i >= 2 && j >= 1)
a[i][j] = a[i-1][j-1] + a[i-1][j];
cout << a[i][j] << ' ';
}
cout << '\n';
}
return 0;
}
B2099 矩阵交换行 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
vector<vector<int>> a(5, vector<int>(5));
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cin >> a[i][j];
}
}
int n, m;
cin >> n >> m;
for (int i = 0; i < 5; i++)
{
int tmp = a[n-1][i];
a[n-1][i] = a[m-1][i];
a[m-1][i] = tmp;
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
return 0;
}
B2103 图像相似度 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int>(n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
vector<vector<int>> b(m, vector<int>(n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> b[i][j];
}
}
int cnt = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if(a[i][j] == b[i][j])
cnt++;
}
}
printf("%.2f", cnt * 100.0 / m / n);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int>(n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
int t = 0;
int cnt = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> t;
if (t == a[i][j])
cnt++;
}
}
printf("%.2f", cnt * 100.0 / m / n);
return 0;
}
B2104 矩阵加法 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int>(n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
vector<vector<int>> b(m, vector<int>(n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> b[i][j];
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
a[i][j] += b[i][j];
cout << a[i][j] << ' ';
}
cout << endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int>(n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
int t = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> t;
cout << a[i][j] + t << ' ';
}
cout << endl;
}
return 0;
}
B2106 矩阵转置 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int>(n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m ; j++)
{
cout << a[j][i] << ' ';
}
cout << endl;
}
return 0;
}
B2101 计算矩阵边缘元素之和 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int> (n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
int sum = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (i == 0 || i == m-1)
sum += a[i][j];
else if (j == 0 || j == n - 1)
sum += a[i][j];
}
}
cout << sum << endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int> (n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
int sum = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (i == 0 || i == m-1 || j == 0 || j == n - 1)
sum += a[i][j];
}
}
cout << sum << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
int sum = 0;
int i = 0;
int j = 0;
int x = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> x;
if (i == 0 || i == m - 1 || j == 0 || j == n - 1)
sum += x;
}
}
cout << sum << endl;
return 0;
}
代码在遍历数组的过程中判断属于边缘的元素,仅对数组中的每个元素遍历了⼀遍,是不会存在重复统计的问题的。
B2108 图像模糊处理 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<vector<int>> a(m, vector<int> (n));
vector<vector<int>> b(m, vector<int> (n));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
b[i][j] = a[i][j];
}
}
for (int i = 1; i < m - 1; i++)
{
for (int j = 1; j < n - 1; j++)
{
b[i][j] = (a[i-1][j] + a[i][j-1] + a[i+1][j] + a[i][j+1] + a[i][j]) / 5.0 + 0.5;
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << b[i][j] << " ";
}
cout << endl;
}
return 0;
}
对于浮点数,舍⼊到最接近的整数是什么意思呢?
⽐如:
4.3舍⼊成4
4.65舍⼊成5
这种情况可以使⽤+0.5后强制类型转换成int类型的值处理。
float f = 4.65;
int n = (int)(f+0.5);
P2550 [AHOI2001] 彩票摇奖 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> v(7);
for (auto &x : v)
{
cin >> x;
}
vector<vector<int>> a(n, vector<int> (7));
vector<int> r(7);
for (int i = 0; i < n; i++)
{
int cnt = 0;
for (int j = 0; j < 7; j++)
{
cin >> a[i][j];
for (int k = 0; k < 7; k++)
if (a[i][j] == v[k])
cnt++;
}
r[7-cnt]++;
}
for (auto x : r)
{
cout << x << ' ';
}
cout << endl;
return 0;
}