学习目标:
2021-2023年的蓝桥杯思路
学习内容:
2022题目
1.小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
思路:先计算出需要多少周,再计算剩下多少天
好处:不需要大量暴力枚举,占用空间
#include<stdio.h>
int main()
{//用long long int 定义数据才不会超出数据要求大概也是0~10^18多一点
/*得出总结:开头定义时候分开,备注每一个变量的作用,如果变量大用 longlongint 和lld,这时候不推荐暴力枚举
因为是数字很大,算出大概然后再算剩下一周的天数*/
long long int day=1;//表示周几天
long long int num=0;
long long int n;
long long int a,b;
scanf("%lld %lld",&a,&b);
scanf("%lld",&n);
//注意,这里不能直接暴力的例举,会有部分超时
long long int sum=a*5+b*2;
long long int weeks=n/sum;//可以被sum整除的
num+=7*weeks;
int unfull_weeks=n%sum;//不可以被sum整除的
for(int i=unfull_weeks;i>0;)
{
if(day==7)
day=1;
if(day%7==6||day%7==0) i-=b;
else i-=a;
num++;
day++;
}
printf("%lld",num);
return 0;
}
2.
思路:每个元素之间相乘后相加,计算每次元素累加,一开始用草稿纸写,根据规律转换为我们想要的格式,用for循环的i自增表示下标是个方向!
由a0*a1+a0*a2+a0*a3+a1*a2+a1*a3+a2*a3
可化为a0(a1+a2+a3) +a1(a2+a3)+a2*a3,但括号内元素一开始为其他元素的集合,不好算
还可以化为a1*a0+a2*(a1+a0)+a3(a0+a1+a2) ,括号里面的元素每次都加一个,用for循环,i的自增,用一个变量承接即可。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
long int n=0,sum=0,s=0;//n为多少个数字,sum为累加乘和
scanf("%ld",&n);
long int a[200000]={0},i;//作用生成每个数组,a[4]生成五个元素,最后一位a[4]不用
for ( i=0;i<n;i++){//作用生成每个元素
scanf("%ld",&a[i]);
}
for ( i=0;i<n;i++){//换个思路,a[i+1]*s=a1*a0 a2(a1+a0)
s += a[i];//计算每次元素累加,a1*a0+a2*(a1+a0)+a3(a0+a1+a2)
sum += a[i+1]*s;
}
printf("%ld",sum);
return 0;
}
3.
思路:可以一个个数,也可以用冒泡
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
char t;
int i,j;
scanf("%s",a);
for(i=0;i<strlen(a)-1;i++){
for(j=0;j<strlen(a)-1-i;j++){//这里的j小于,因为每次交换顺序后,保证最大为最后面一个,比较过后不比较,所以是越来越小
if(a[j]>a[j+1]) {//如果前比后大,互换顺序
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("%s",a);
return 0;
}