一、1.握手问题 - 蓝桥云课

算法代码:
cpp
#include <iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=49;i>=7;i--)
sum+=i;
cout<<sum<<endl;
return 0;
}
二、1.门牌制作 - 蓝桥云课

算法代码:
cpp
#include <iostream>
using namespace std;
int main()
{
int ans=0;
for(int i=1;i<=2020;i++)
{
int w=i;
if(i%10==2) ans++;
if(i/10%10==2) ans++;
if(i/100%10==2) ans++;
if(i/1000==2) ans++;
}
cout<<ans;
return 0;
}
三、1.小球反弹 - 蓝桥云课

算法代码:
cpp
#include<bits/stdc++.h>
using namespace std;
bool check(int a,int b){
if(a%b==0 && (a/b)%2==0)return true;
return false;
}
int main(){
long long x=343720,y=233333;
long long t=1;
long long lx,ly;
while(1){
lx=15*t;
ly=17*t;
if(check(lx,x) && check(ly,y))break;
t++;
}
printf("%.2f",sqrt(lx*lx+ly*ly));
return 0;
}
四、2.平方差 - 蓝桥云课

算法代码:
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int flag_A,flag_B;
int len_A,len_B;
int a[N],b[N];
int aa[N],bb[N];
int c[N];
//将字符串转换为数组数字
void get_num(string& s,int* arr,int& len,bool& isNeg)
{
if(s[0]=='-')
{
isNeg=true;
s=s.substr(1);
}
len=s.size();
for(int i=0;i<len;i++)
{
arr[i]=s[len-1-i]-'0';
}
}
//模拟实现乘法
void mult(int* a,int len_A,int* b,int len_B,int* C)
{
for(int i=0;i<N;i++)
{
C[i]=0;
}
//首先每一位相乘得到结果
for(int i=0;i<len_A;i++)
{
for(int j=0;j<len_B;j++)
{
C[i+j]+=a[i]*b[j];
}
}
int len_C=len_A+len_B;
//处理进位情况
for(int i=0;i<len_C;i++)
{
if(C[i]>=10)
{
C[i+1]+=C[i]/10;
C[i]%=10;
}
}
}
//模拟实现减法
void sub(int* a,int len_A,int* b,int len_B,int* C)
{
int borrow=0;
for(int i=0;i<len_A;i++)
{
int temp=a[i]-(i<len_B?b[i]:0)-borrow;
if(temp<0)
{
temp+=10;
borrow=1;
}
else
{
borrow=0;
}
C[i]=temp;
}
}
//比较绝对值大小
int comp(int* a,int len_A,int* b,int len_B)
{
if(len_A>len_B) return 1;
if(len_A<len_B) return 0;
for(int i=len_A-1;i>=0;i--)
{
if(a[i]>b[i]) return 1;
if(a[i]<b[i]) return 0;
}
return 1;
}
//解决平方差的函数
void solve()
{
string A, B;
cin >> A >> B;
bool isNeg_A=false,isNeg_B=false;
//转换字符串为数字数组
get_num(A,a,len_A,isNeg_A);
get_num(B,b,len_B,isNeg_B);
//模拟实现乘法
mult(a,len_A,a,len_A,aa);
mult(b,len_B,b,len_B,bb);
// 计算平方差
int len_aa=len_A*2;
int len_bb=len_B*2;
while(len_aa>1&&aa[len_aa-1]==0)len_aa--;
while(len_bb>1&&bb[len_bb-1]==0)len_bb--;
//比较
int cmp=comp(aa,len_aa,bb,len_bb);
if(cmp)
{
sub(aa,len_aa,bb,len_bb,c);
}
else
{
sub(bb,len_bb,aa,len_aa,c);
}
//确定结果长度
int len_c=max(len_aa,len_bb);
while(len_c>1&&c[len_c-1]==0) len_c--;
//输出结果
if(!cmp) cout<<"-";
for(int i=len_c-1;i>=0;i--)
{
cout<<c[i];
}
}
int main()
{
//解决平方差的函数
solve();
return 0;
}
五、3.幸运数 - 蓝桥云课

算法代码:
cpp
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
const ll N = 1e8;
int ans = 0; // 初始化 ans
// 计算字符串 s 中 [left, right) 范围内的数字和
int add(int left, int right, const string& s) {
int sum = 0;
for (int i = left; i < right; i++) {
sum += s[i] - '0'; // 字符转数字
}
return sum;
}
int main() {
for (ll i = 1; i <= N; i++) {
string tmp = to_string(i);
int len = tmp.size();
if (len % 2 == 0) {
int mid = len / 2;
int first = add(0, mid, tmp); // 前半部分 [0, mid)
int second = add(mid, len, tmp); // 后半部分 [mid, len)
if (first == second) {
ans++;
}
}
}
cout << ans;
return 0;
}
剩下的交给编译器,能算出答案的,答案为4430091
六 、1.九进制转十进制 - 蓝桥云课

算法代码:
cpp
#include <iostream>
using namespace std;
int main()
{
cout<<2*9*9*9+2*9+2;
return 0;
}
七、1.艺术与篮球 - 蓝桥云课


算法代码:
cpp
#include<bits/stdc++.h>
using namespace std;
const int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
const int num[]={13,1,2,3,5,4,4,2,2,2};
const int start_year=2000;
const int end_year=2024;
int week=6;
int basket=0;
int main()
{
for(int year=start_year;year<=end_year;year++)
{
for(int month=1;month<=12;month++)
{
int tmp=days[month];
if(year%4==0&&year%100!=0&&month==2)
{
tmp=29;
}
else if(year%400==0&&month==2)
{
tmp=29;
}
for(int day=1;day<=tmp;day++)
{
if((year==2024)&&(month==4)&&(day==14))
{
cout<<basket;
return 0;
}
int ans=0;
int sum=year*10000+month*100+day;
int pos=0;
while(sum > 0)
{
int digit = sum % 10; // 获取最后一位数字
sum /= 10; // 去掉最后一位
ans += num[digit]; // 加上对应数字的笔画数
}
if(ans>50)
{
basket++;
}
}
}
}
cout<<basket;
return 0;
}
八、11.求和 - 蓝桥云课

算法代码:
cpp
#include <stdio.h>
#include <stdlib.h>
typedef long long ll;
int main(int argc, char *argv[])
{
ll sum=0,n=20230408;
sum=(1+n)*n/2;
printf("%lld",sum);
return 0;
}
九、1.3个1 - 蓝桥云课

算法代码:
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int count = INT_MAX;
int ans_end = 0;
for(int i = 4; i <= count; i++)
{
int tmp = i;
int ans = 0;
while(tmp)
{
if(tmp % 2 == 1) ans++; // 直接检查模2结果,不改变tmp的值
tmp /= 2; // 关键:必须更新tmp的值,相当于右移一位
}
if(ans == 3) ans_end++;
if(ans_end == 23)
{
cout << i;
return 0;
}
}
return 0;
}
十、1.美丽的2024【算法赛】 - 蓝桥云课

算法代码:
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num=2024;
int ans=0;
while(num)
{
if(num%2==1) ans++;
num/=2;
}
cout<<ans;
return 0;
}
十一、3.跑步 - 蓝桥云课

算法代码:
cpp
#include <stdio.h>
// 每个月的日期数,ds[i]代表i月份的天数
int ds[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
int sy = 2022; // 起始年份
int ey = 2022; // 结束年份
int week = 6; // 定义 0-6 ,0为星期日,1为星期一,2为星期二...
int ans = 0;
for (int y = sy; y <= ey; ++y) { // 第一层循环,枚举年份
for (int m = 1; m <= 12; ++m) { // 第二层循环,枚举月份
int dd = ds[m];
if (y % 4 == 0 && y % 100 != 0 && m == 2) // 判断是不是闰月
dd = 29;
else if (y % 400 == 0 && m == 2) // 判断是不是闰月
dd = 29;
for (int d = 1; d <= dd; ++d) { // 枚举天
if (week == 0 || week == 6 || d % 10 == 1) { // 如果满足某一个条件,就记录答案
ans ++;
}
week = (week + 1) % 7; // 向后推移星期几
}
}
}
printf("%d\n", ans);
return 0;
}