Day1 蓝桥杯省赛冲刺精炼刷题 —— 位运算与循环(2)

一、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;
}
相关推荐
张人玉18 分钟前
蓝桥杯比赛 python程序设计——奇怪的捐赠
职场和发展·蓝桥杯
Joyee69120 分钟前
文本领域的在线协作引擎——OT 算法的原理与应用
算法
周Echo周24 分钟前
5、vim编辑和shell编程【超详细】
java·linux·c++·后端·编辑器·vim
lisw0526 分钟前
排序算法可视化工具——基于React的交互式应用
算法·react.js·排序算法
榆榆欸26 分钟前
6.实现 Reactor 模式的 EventLoop 和 Server 类
linux·服务器·网络·c++·tcp/ip
阿巴~阿巴~32 分钟前
2023年3月全国计算机等级考试真题(二级C语言)
c语言
奋进的小暄44 分钟前
贪心算法(13)(java)合并区间
算法
快来卷java1 小时前
深入剖析雪花算法:分布式ID生成的核心方案
java·数据库·redis·分布式·算法·缓存·dreamweaver
阿巴~阿巴~1 小时前
C/C++蓝桥杯算法真题打卡(Day11)
算法
tpoog1 小时前
[MySQL]数据类型
android·开发语言·数据库·mysql·算法·adb·贪心算法