蓝桥杯矩阵求和_刷蓝桥杯官网习题,准备蓝桥杯的小伙伴,一起来交流吧(✪ω✪)。(2月27日更新)...
考前集中把藍橋杯官網上的算法提高里的習題做一做,希望有備戰的小伙伴與我一起刷題😄,上面的題都不難,比y總的課簡單多了😂。
學算法不到半年時間,假如有小伙伴做的方法比我的更簡單或者我的代碼有bug,歡迎在下方評論,謝謝啦。
ADV-306 輸出三個整數的最大數
#include
#include
#include
#include
using namespace std;
const int N = 3;
int a[3];
int main(){
for (int i = 0; i < N; i++) cin >> a[i];
sort(a, a + N);
cout << a[2] << endl;
return 0;
}
ADV-305 輸出二進制表示
#include
#include
using namespace std;
char s[10];
int n;
int main()
{
cin >> n;
itoa(n, s, 2);
int end = 0;
while (s[end] != '\0')
end++;
end--;
if (n >= 0) cout << 0;
else cout << 1;
int mask = 1, num = 0;
for (int i = end; i >= 0 && i >= end - 6; i--)
{
num += (s[i] - '0') * mask;
mask *= 10;
}
printf("%07d", num);
return 0;
}
ADV-304 矩陣轉置
#include
#include
#include
#include
using namespace std;
const int N = 25;
int n, m;
int a[N][N];
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
scanf("%d", &a[i][j]);
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
printf("%d ", a[j][i]);
puts("");
}
return 0;
}
ADV-303 數組求和
數據范圍較小,暴力$O(n^2)$就可以了。
#include
#include
#include
#include
using namespace std;
const int N = 1010;
int n, m;
int a[N * 2];
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
a[i + n] = a[i];
}
int ans = 0;
for (int i = 1; i <= n; i++)
{
int sum = 0;
for (int j = i; j <= i + m - 1; j++) sum += a[j];
ans = max(ans, sum);
}
printf("%d\n", ans);
return 0;
}
ADV-302 秘密行動
#include
#include
#include
#include
using namespace std;
const int N = 10010;
int n;
int a[N];
int f[N][2]; // 第二維為0的話表示到達某一層是跳上來的,為1表示爬上來的。
// 一開始做時根本沒想第二維,但是怎么做也做不對,所以又想了一下,其實上樓的過程是有限制的,
// 比如這一層是跳上來的話,上一層一定是爬上來的,這一層是爬上來的,那么上一層既可以是跳上來的,也可以是爬上來的。
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
f[1][0] = 0;
f[1][1] = a[1];
for (int i = 2; i <= n; i++)
{
f[i][0] = min(f[i - 1][1], f[i - 2][1]);
f[i][1] = min(f[i - 1][0], f[i - 1][1]) + a[i]; // 這個不應該是a[i]-a[i-1]嗎?但是因為樣例沒過,所以改了一下,居然才對了。。。
}
cout << min(f[n][0], f[n][1]) << endl;
return 0;
}
ADV-301 字符串壓縮
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
map m;
string s, s1;
getline(cin, s);
for (string::iterator it = s.begin(); it != s.end(); it++)
{
m[*it]++;
if (*it == ' ') s1.push_back(*it);
if (m[*it] == 1 || m[*it] == 3 || m[*it] == 6) s1.push_back(*it);
}
cout << s1 << endl;
return 0;
}
ADV-300 字符串生成器
不會啊。。
ADV-299 宰羊
題解鏈接,之前我在問答區問過,這是胡圖圖大佬寫的。
ADV-298 和諧宿舍2
#include
#include
#include
#include
using namespace std;
const int N = 110;
int n, m;
int h[N];
int f[N][N]; // f[i][k]代表 用k塊木板 從把前i個作品蓋住的集合的最小值
int maxh[N][N];
int main()
{
scanf("%d%d", &n, &m);
int sum = 0;
for (int i = 1; i <= n; i++) scanf("%d", &h[i]);
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j++)
{
int s = 0;
for (int k = i; k <= j; k++) s = max(s, h[k]);
maxh[i][j] = s;
}
for (int i = 1; i <= n; i++)
for (int k = 1; k <= m && k <= i; k++)
{
if (k == 1) f[i][k] = i * maxh[1][i];
else if (k == i)
{
int sum = 0;
for (int u = 1; u <= i; u++) sum += h[u];
f[i][k] = sum;
}
else
{
f[i][k] = 0x3f3f3f3f;
// u代表最后一塊木板的起始位置
for (int u = i; u >= k; u--)
{
f[i][k] = min(f[i][k], f[u - 1][k - 1] + maxh[u][i] * (i - u + 1));
}
}
}
int ans = 0x3f3f3f3f;
for (int i = 1; i <= m; i++)
ans = min(ans, f[n][i]);
printf("%d", ans);
return 0;
}
ADV-297 快速排序
#include
#include
#include
#include
using namespace std;
const int N = 15;
int a[N];
void quick_sort(int l, int r)
{
if (l == r) return;
int x = a[l + r >> 1];
int i = l - 1, j = r + 1;
while (i < j)
{
while (a[++i] < x) ;
while (a[--j] > x) ;
if (i < j)
swap(a[i], a[j]);
}
quick_sort(l, j);
quick_sort(j + 1, r);
}
int main()
{
int x, cnt = 0;
while (cin >> x, x)
a[cnt++] = x;
quick_sort(0, cnt - 1);
for (int i = 0; i < cnt; i++) cout << a[i] << " ";
return 0;
}
總結
以上是生活随笔為你收集整理的蓝桥杯矩阵求和_刷蓝桥杯官网习题,准备蓝桥杯的小伙伴,一起来交流吧(✪ω✪)。(2月27日更新)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1527):过渡---文档分析
- 下一篇: 移动通信发展史及原理学习