算法-蓝桥杯原题

2023-11-23 10:40
文章标签 算法 蓝桥 原题

本文主要是介绍算法-蓝桥杯原题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

2019年第十届蓝桥杯国赛B组试题A-平方序列

2019年第十届蓝桥杯国赛B组试题B-质数拆分

2019年第十届蓝桥杯国赛B组试题D-求值

2019年第十届蓝桥杯国赛B组试题E-路径计数

2019年第十届蓝桥杯国赛B组试题F-最优包含

2019年第十届蓝桥杯国赛B组试题G-排列数

2018年第九届蓝桥杯国赛B组试题A-换零钞

2018年第九届蓝桥杯国赛B组试题B-激光样式

2018年第九届蓝桥杯国赛B组试题D-调手表

2017年第八届蓝桥杯国赛B组试题A-36进制

2017年第八届蓝桥杯国赛B组试题B-瓷砖样式

2017年第八届蓝桥杯国赛B组试题E-对局匹配

2016年第七届蓝桥杯国赛B组试题A-一步之遥

2016年第七届蓝桥杯国赛B组试题B-凑平方数

 练习题:星期一


2019年第十届蓝桥杯国赛B组试题A-平方序列

【问题描述】
小明想找到两个正整数 X 和 Y,满足

  • 2019 < X < Y;

  • 20192 , X2 , Y2 组成等差数列。

请你求出在所有可能的解中,X + Y 的最小值是多少?

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


答案:7020


题解 暴力即可,可用等差数列知识适当优化a + c = 2b,∴ c = 2b - a (不过填空题可以但没必要)

#include<bits/stdc++.h>
using namespace std;int main(){long long x=2019, y,z;for(int y=2020; ;y++){z=sqrt(2*y*y-x*x);if(z*z==2*y*y - x*x){cout<<y+z;break;}}return 0;}

2019年第十届蓝桥杯国赛B组试题B-质数拆分

【问题描述】

2019可以被分解成若干个两两不同的素数,请问不同的分解方案有多少种?
注意:分解方案不考虑顺序,如 2 + 2017 = 2019 和 2017 + 2 = 2019 属于同一种方案。


答案:55965365465060


题解
01背包:

#include <bits/stdc++.h>
using namespace std;const int N = 2020;int dp[N];
int st[N], prim[N];
int k;
//筛一遍素数
void init()
{st[0] = st[1] = 0;st[2] = 1;for (int i = 2; i <= 2019; i++){if (!st[i]){prim[k++] = i;for (int j = i + i; j <= 2019; j += i){st[i] = true;}}}
}int main()
{init();dp[0] = 1;for (int i = 1; i < k; i++){for (int j = 2019; j >= prim[i]; j--){dp[j] += dp[j-prim[i]];}}cout << dp[2019];return 0;
}

2019年第十届蓝桥杯国赛B组试题D-求值

【问题描述】
学习了约数后,小明对于约数很好奇,他发现,给定一个正整数 t,总是可以找到含有 t 个约数的整数。

小明对于含有 t 个约数的最小数非常感兴趣,并把它定义为 St 。

例如 S1 = 1, S2 = 2, S3 = 4, S4 = 6,···。

现在小明想知道,当 t = 100 时,St 是多少?即 S100 是多少?

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


答案:45360


题解
暴力

#include<bits/stdc++.h>
using namespace std;int judge(int n){int cnt=0;for(int i=1; i<=n; i++){if(n%i==0)cnt++;}return cnt;
}int main(){for(int i=1; ;i++){if(judge(i)==100){cout<<i;break;}}return 0;
}

2019年第十届蓝桥杯国赛B组试题E-路径计数

【问题描述】
从一个 5 x 5 的方格矩阵的左上角出发,沿着方格的边走,满足以下条件的路线有多少种?

  • 总长度不超过 12;
  • 最后回到左上角;
  • 路线不自交;
  • 不走出 5 x 5 的方格矩阵范围之外。

如下图所示,ABC 是三种合法的路线。注意 B 和 C 由于方向不同,所以视为不同的路线。

在这里插入图片描述
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


答案:202


题解
DFS:

#include <bits/stdc++.h>
using namespace std;int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; //上右下左
int vis[10][10];
int cnt;void dfs(int x, int y, int step)
{if (step > 12)return;if (x == 0 && y == 0 && step > 2){cnt++;return;}for (int i = 0; i < 4; i++){int a = x + dx[i], b = y + dy[i];if (a >=0  && a < 6 && b >=0  && b < 6 && !vis[a][b]){vis[a][b] = 1;dfs(a, b, step + 1);vis[a][b] = 0;}}
}int main()
{dfs(0, 0, 0);cout << cnt;return 0;
}

2019年第十届蓝桥杯国赛B组试题F-最优包含

我们称一个字符串 SS 包含字符串 TT 是指 TT 是 SS 的一个子序列,即可以从字符串 SS 中抽出若干个字符,它们按原来的顺序组合成一个新的字符串与 TT 完全一样。

给定两个字符串 SS 和 TT,请问最少修改 SS 中的多少个字符,能使 SS 包含 TT?

输入格式

输入两行,每行一个字符串。

第一行的字符串为 SS,第二行的字符串为 TT。

两个字符串均非空而且只包含大写英文字母。

输出格式

输出一个整数,表示答案。

数据范围

1≤|T|≤|S|≤10001≤|T|≤|S|≤1000

输入样例:

ABCDEABCD
XAABZ

输出样例:

3

题解
#include<bits/stdc++.h>
using namespace std;

// 解题思路:动态规划。
// dp[i][j]表示令T的前j个字符成为S的前i个字符的子序列需要修改的字符个数。
// 先初始化i=j和j=0的情况。
// 状态转移方程:
// if(s[i]==t[j])
//   dp[i][j]=dp[i-1][j-1];
// else
//   dp[i][j]=min(dp[i-1][j],dp[i-1][j-1]+1);

const int N = 1e3+10;
int dp[N][N];
string s,t;

int main(){
cin>>s>>t;

int ls= s.size();
int lt= t.size();if(s[0]!=t[0]){dp[0][0]=1;
}//ABCDABCD  S
//AABCX    T
for (int i = 1; i < lt; i++)if (s[i] == t[i])dp[i][i] = dp[i - 1][i - 1];elsedp[i][i] = dp[i - 1][i - 1] + 1;for (int i = 1; i < ls; i++)
{if (s[i] == t[0])dp[i][0] = 0;elsedp[i][0] = dp[i - 1][0];
}for (int j = 1; j < lt; j++)
{for (int i = j + 1; i < ls; i++){if (s[i] == t[j])dp[i][j] = dp[i - 1][j - 1];   //21=10  31=20   41=30        32=21   42=31elsedp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1] + 1); //变j还是不变j   21=11/10  31=21/20    32=22/21 初始化考虑}
}
printf("%d\n", dp[ls - 1][lt - 1]);return 0;

}

2019年第十届蓝桥杯国赛B组试题G-排列数

在一个排列中,一个折点是指排列中的一个元素,它同时小于两边的元素,或者同时大于两边的元素。

对于一个 1∼n1∼n 的排列,如果可以将这个排列中包含 tt 个折点,则它称为一个 t+1t+1 单调序列。

例如,排列 (1,4,2,3)(1,4,2,3) 是一个 33 单调序列,其中 44 和 22 都是折点。

给定 nn 和 kk,请问 1∼n1∼n 的所有排列中有多少个 kk 单调队列?

输入格式

输入一行包含两个整数 n,kn,k。

输出格式

输出一个整数,表示答案。

答案可能很大,你可需要输出满足条件的排列数量除以 123456123456 的余数即可。

数据范围

1≤k≤n≤5001≤k≤n≤500

输入样例:

4 2

输出样例:

12

题解
#include <bits/stdc++.h>
using namespace std;

int n, k;
int a[501];

void init(int n)
{
for (int i = 1; i <= n; i++)
{
a[i] = i;
}
}

int main()
{
cin >> n >> k;
int sum = 0;
init(n);

do
{int cnt = 0;for (int i = 2; i <= n-1; i++){if ((a[i] > a[i + 1] && a[i] > a[i - 1]) || (a[i] < a[i + 1] && a[i] < a[i - 1])){cnt++;}}if (cnt+1 == k){sum++;}} while (next_permutation(a + 1, a + 1 + n));
cout << sum;
return 0;

}

2018年第九届蓝桥杯国赛B组试题A-换零钞

【问题描述】

x星球的钞票的面额只有:100元,5元,2元,1元,共4种。
小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱。
小明有点强迫症,他坚持要求200元换出的零钞中2元的张数刚好是1元的张数的10倍,剩下的当然都是5元面额的。
银行的工作人员有点为难,你能帮助算出:在满足小明要求的前提下,最少要换给他多少张钞票吗?
(5元,2元,1元面额的必须都有,不能是0)

【答案提交】
注意,需要提交的是一个整数,不要填写任何多余的内容。


答案:74


题解
暴力:

#include <bits/stdc++.h>
using namespace std;int main()
{for(int i=40; i>0; i--)for (int j = 200; j >0; j--){if((i*5+j*1+j*10*2)==200){cout<<i+j+j*10<<endl;break;}}return 0;
}

2018年第九届蓝桥杯国赛B组试题B-激光样式

【问题描述】

x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。
安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开!
国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果?
显然,如果只有3台机器,一共可以成5种样式,即:
1、全都关上(sorry, 此时无声胜有声,这也算一种)
2、开一台,共3种
3、开两台,只1种
但是30台就不好算了,国王只好请你帮忙了。

【答案提交】
要求提交一个整数,表示30台激光器能形成的样式种数。
注意,只提交一个整数,不要填写任何多余的内容。


答案:2178309


题解
DFS:

#include <bits/stdc++.h>
using namespace std;int ans;
const int N = 30;
bool st[N];void dfs(int u)
{if(u == 30){ans ++;return;}// 每一次都有两种选择  dfs(u + 1);              // 1、关闭if(!st[u - 1])           // 2、打开{st[u] = true;dfs(u + 1);st[u] = false;}
}int main()
{dfs(0);cout << ans << endl;return 0;
}

2018年第九届蓝桥杯国赛B组试题D-调手表

问题描述
小明买了块高端大气上档次的电子手表,他正准备调时间呢。

在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟。

大家都知道,手表只有一个按钮可以把当前的数加一。

在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2;如果是 n - 1,那么按一次后会变成 0 。

作为强迫症患者,小明一定要把手表的时间调对。如果手表上的时间比当前时间多 1,则要按 n - 1 次加一按钮才能调回正确时间。

小明想,如果手表可以再添加一个按钮,表示把当前的数加 k 该多好啊……

他想知道,如果有了这个 +k 按钮,按照最优策略按键,从任意一个分钟数调到另外任意一个分钟数最多要按多少次。

注意,按 +k 按钮时,如果加 k 后数字超过 n - 1,则会对 n 取模。

比如,n = 10, k = 6 的时候,假设当前时间是 0,连按 2 次 +k 按钮,则调为 2。

输入格式
一行两个整数 n, k,意义如题。

输出格式
一行一个整数,表示按照最优策略按键,从一个时间调到另一个时间最多要按多少次。

样例输入
5 3

样例输出
2

样例解释
如果时间正确则按 0 次。否则要按的次数和操作系列之间的关系如下:
1:+1
2:+1, +1
3:+3
4:+3, +1

数据范围
对于 30% 的数据 0 < k < n ≤ 5
对于 60% 的数据 0 < k < n ≤ 100
对于 100% 的数据 0 < k < n ≤ 105


题解
BFS:

#include <bits/stdc++.h>
using namespace std;const int maxn = 1005, inf = 1 << 29, mod = 1000000007;int d[maxn];void bfs()
{queue<int> q;q.push(0);d[0] = 0;while (!q.empty()){int t = q.front();q.pop();int a = (t + 1) % n;if (d[a] == -1){d[a] = d[t] + 1;q.push(a);}int b = (t + k) % n;if (d[b] == -1){d[b] = d[t] + 1;q.push(b);}}
}int main()
{memset(d, -1, sizeof(d));cin >> n >> k;bfs();int ans = 0;for (int i = 0; i < n; i++)ans = max(ans, d[i]);cout << ans;return 0;
}

2017年第八届蓝桥杯国赛B组试题A-36进制

【问题描述】

对于16进制,我们使用字母A-F来表示10及以上的数字。
如法炮制,一直用到字母Z,就可以表示36进制。
36进制中,A表示10,Z表示35,AA表示370
你能算出 MANY 表示的数字用10进制表示是多少吗?

【答案提交】
请提交一个整数,不要填写任何多余的内容(比如,说明文字)


答案:1040254


题解一
手算:

22 * 363 + 10 * 362 + 23 * 361 + 34 * 360

题解二
模拟:

#include<bits/stdc++.h>
using  namespace std;int main(){string s="MANY";int sum=0;for(int i=0; i<s.size(); i++){sum=sum*36+s[i]-'A'+10;}cout<<sum;return 0;}

2017年第八届蓝桥杯国赛B组试题B-瓷砖样式

问题描述
小明家的一面装饰墙原来是 3 × 10 的小方格。现在手头有一批刚好能盖住 2 个小方格的长方形瓷砖。

瓷砖只有两种颜色:黄色和橙色。小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。

小明有个小小的强迫症:忍受不了任何 2 × 2 的小格子是同一种颜色。

瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑组合图案,请忽略瓷砖的拼缝

显然,对于 2 × 3 个小格子来说,口算都可以知道:一共 10 种贴法,如图所示:

在这里插入图片描述

但对于 3 ×10 的格子呢?肯定是个不小的数目,请你利用计算机的威力算出该数字。

答案提交
注意:你需要提交的是一个整数,不要填写任何多余的内容(比如:说明性文字)


答案:101466


题解
DFS & set:

解题思路
一层一层地铺放瓷砖,铺放完毕后,记录所有合法样式,并用 set 去重。

  • -1

    该位置未放置瓷砖

  • 0

    放置的是黄色瓷砖

  • 1

    放置的是橙色瓷砖

#include <bits/stdc++.h>
using namespace std;const int maxn = 1005, inf = 1 << 29, mod = 1000000007;
const double pi = acos(-1.0);
typedef long long ll;
;
inline int gcd(int x, int y)
{if (!x)return y;return gcd(y % x, x);
}
int n, m, k, max_sum, min_sum;
int a[maxn], b[maxn];
int aa[maxn][maxn], bb[maxn][maxn], dp[maxn][maxn];
int dir[][2] = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}, {-1, 1}, {-1, -1}, {1, -1}, {1, 1}};
vector<int> vi;set<string> st;bool judge()
{for (int i = 1; i < 3; i++){for (int j = 1; j < 10; j++){if ((aa[i][j] + aa[i + 1][j] + aa[i][j + 1] + aa[i + 1][j + 1]) % 4 == 0){return false;}}}return true;
}void dfs(int x, int y)
{if (x == 4){if (judge()){string ans = "";for (int i = 1; i <= 3; i++){for (int j = 1; j <= 10; j++){char *temp;itoa(aa[i][j], temp, 10);ans += temp;}}st.insert(ans);}return;}if (aa[x][y] == -1){//横着放if (y + 1 <= 10 && aa[x][y + 1] == -1){//两种颜色for (int i = 0; i < 2; ++i){aa[x][y] = aa[x][y + 1] = i;if (y + 2 <= 10)dfs(x, y + 1);elsedfs(x + 1, 1);aa[x][y] = aa[x][y + 1] = -1;}}//竖着放if (x + 1 <= 3 && aa[x + 1][y] == -1){for (int i = 0; i < 2; i++){aa[x][y] = aa[x + 1][y] = i;if (y + 1 <= 10)dfs(x, y + 1);elsedfs(x + 1, 1);aa[x][y] = aa[x + 1][y] = -1;}}}else{if (y == 10)dfs(x + 1, 1);elsedfs(x, y + 1);}
}int main()
{memset(aa, -1, sizeof(aa));dfs(1, 1);cout << st.size() << endl;return 0;
}

2017年第八届蓝桥杯国赛B组试题E-对局匹配

问题描述
小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。

小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是 K 的两名用户匹配在一起。

如果两人分差小于或大于 K,系统都不会将他们匹配。

现在小明知道这个网站总共有 N 名用户,以及他们的积分分别是 A1, A2, … AN。

小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来 (任意两名用户积分差不等于 K)?

输入格式
第一行包含两个个整数 N 和 K。
第二行包含N个整数 A1, A2, … AN。

输出格式
一个整数,代表答案。

样例输入1
10 0
1 4 2 8 5 7 1 4 2 8

样例输出1
6

样例输入2
10 1
2 1 1 1 1 4 4 3 4 4

样例输出2
8

数据范围
对于 30% 的数据,1 ≤ N ≤ 10
对于 100% 的数据,1 ≤ N ≤ 105, 0 ≤ Ai ≤ 105, 0 ≤ K ≤ 105


题解一
DFS(会超时)

#include <bits/stdc++.h>
using namespace std;const int maxn = 1005, inf = 1 << 29, mod = 1000000007;
const double pi = acos(-1.0);
typedef long long ll;
;
inline int gcd(int x, int y)
{if (!x)return y;return gcd(y % x, x);
}
int n, m, k, max_sum, min_sum;
int a[maxn], b[maxn], s[maxn], st[maxn];
int aa[maxn][maxn], bb[maxn][maxn], dp[maxn][maxn];
int dir[][2] = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}, {-1, 1}, {-1, -1}, {1, -1}, {1, 1}};
vector<int> vi;bool judge(int u, int i)
{for (int j = 1; j < u; j++){if (a[j] - s[i] == k || s[i] - a[j] == k)return false;}return true;
}void dfs(int u)
{m = max(m, u - 1);for (int i = 1; i <= n; i++){if (st[i] || !judge(u, i))continue;st[i] = true;a[u] = s[i];dfs(u + 1);st[i] = false;}return ;
}int main()
{cin >> n >> k;for (int i = 1; i <= n; i++){cin >> s[i];}dfs(1);cout<<m;return 0;
}

题解二
动态规划:

以第二个数据 2 1 1 1 1 4 4 3 4 4 为例,由于 k = 1,所以分成 1 组公差为 1 等差数列。

  • 等差数列:0 1 2 3 4 …
  • 出现次数:0 4 1 1 4 …

决策:由于相邻两项公差为 k,所以不能选择相邻的两项。

状态转移方程:

  • 当 i == 0f[i] = s[i]
  • 当 i == 1f[i] = max(f[i - 1], s[i])
  • 当 i >= 2f[i] = max(f[i - 1], f[i - 2] + s[i])
#include <iostream>
using namespace std;const int N = 100010;int n, k, x, ans;
int cnt[N], s[N], f[N];int main()
{cin >> n >> k;for (int i = 1; i <= n; i ++){cin >> x;cnt[x] ++;												// 统计每个积分出现的次数 }if(k == 0)													// k = 0 需要特判 {for (int i = 0; i < N; i ++)if(cnt[i]) ans ++;	}else{for (int i = 0; i < k; i ++)							// 分成 k 个公差为 k 的等差数列 {int u = 0;for (int j = i; j <= N; j += k)						// 首项分别为 i 出现的次数 s[u ++] = cnt[j];f[0] = s[0];for (int j = 1; j < u; j ++){if(j == 1) f[j] = max(f[j - 1], s[j]);	else f[j] = max(f[j - 1], f[j - 2] + s[j]);}ans += f[u - 1];									// 加上每组等差数列选择的最大值}}cout << ans << endl;return 0;
}

2016年第七届蓝桥杯国赛B组试题A-一步之遥

问题描述】

从昏迷中醒来,小明发现自己被关在X星球的废矿车里。
矿车停在平直的废弃的轨道上。
他的面前是两个按钮,分别写着“F”和“B”。
小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。
按F,会前进97米。按B会后退127米。
透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。
他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。
或许,通过多次操作F和B可以办到。
矿车上的动力已经不太足,黄色的警示灯在默默闪烁…
每次进行 F 或 B 操作都会消耗一定的能量。
小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方1米远的地方。
请填写为了达成目标,最少需要操作的次数。

【答案提交】
注意,需要提交的是一个整数,不要填写任何无关内容(比如:解释说明等)


答案:97


题解
枚举:

#include <iostream>
using namespace std;int main()
{for (int i = 1; i < 100; i ++)for (int j = 1; j < 100; j ++)if(i * 97 - j * 127 == 1) cout << i + j << endl;return 0;        
}

2016年第七届蓝桥杯国赛B组试题B-凑平方数

问题描述
把 0 ~ 9 这 10 个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。

比如:0,36,5948721

再比如:{1098524736};{1,25,6390784};{0,4,289,15376} 等等…

注意,0 可以作为独立的数字,但不能作为多位数字的开始。

分组时,必须用完所有的数字,不能重复,不能遗漏。

如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?

答案提交
注意:需要提交的是一个整数,不要填写多余内容。


答案:300


题解
DFS:

#include<bits/stdc++.h>using namespace std;typedef long long LL;LL used[10], tmp[10], s[10], k;
set<string> cnt;void dfs(int u)
{if (u == 10){copy(used, used + k, tmp); // 将 used 数组中的内容,复制给 tmp 数组sort(tmp, tmp + k);string ans = "";for (int i = 0; i < k; i++){char s[20];sprintf(s, "%lld", tmp[i]); // 将数字转换成字符串ans += s;ans += '-'; // 每个平方数都以 '-' 隔开}cnt.insert(ans); // 存储答案,并去重return;}if (s[u] == 0) // 0 不能作为数字的开头,自成一组{used[k++] = 0;dfs(u + 1);used[--k] = 0;}else{LL t = 0;for (int i = u; i < 10; i++){t = t * 10 + s[i];LL x = sqrt(t);if (x * x == t){used[k++] = t;dfs(i + 1);used[--k] = 0;}}}
}int main()
{for (int i = 0; i < 10; i++)s[i] = i;do{dfs(0);k = 0;} while (next_permutation(s, s + 10));cout << cnt.size() << endl;return 0;
}

 练习题:星期一

整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?(不要告诉我你不知道今天是星期几)

以下程序实现了这一功能,请你补全以下空白处内容:

提示:

判断1901年1月1日到2000年12月31的每一天是星期几,如果是星期一则统计的个数+1。
#include <stdio.h>
int main()
{int year, day, dayrun = 0, dayping = 0, sumday = 0;int count = 0;for (year = 1901; year <= 2000; year++){if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){dayrun += 366;}else{dayping += 365;}}sumday = dayrun + dayping;__________________________;printf("%d", count);return 0;
}

Afor (day = 2; day <= sumday - 7; day++)
{
    count++;
}
Bfor (day = 2; day <= sumday - 7; day += 7)
{
    count++;
}
Cfor (day = 2; day < sumday; day += 7)
{
    count++;
}
Dfor (day = 2; day <= sumday; day += 7)
{
    count++;
}

答案:

for (day = 2; day <= sumday - 7; day += 7)
{count++;
}

这篇关于算法-蓝桥杯原题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/417349

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

最大公因数:欧几里得算法

简述         求两个数字 m和n 的最大公因数,假设r是m%n的余数,只要n不等于0,就一直执行 m=n,n=r 举例 以18和12为例 m n r18 % 12 = 612 % 6 = 06 0所以最大公因数为:6 代码实现 #include<iostream>using namespace std;/