试题 A: 九进制转十进制
本题总分:5 分
【问题描述】
九进制正整数 (2022)9 转换成十进制等于多少p>
这道题没什么说的,2*9*9*9+0*9*9+2*9+2*1=1478;
试题 B: 顺子日期
本题总分:5 分
【问题描述】
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日
期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺
子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123;
而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022
年份中,一共有多少个顺子日期。
这道题我感觉有歧义,因为我在写的时候不懂出题人怎么想的,012按照题目的说法应该也算,但是为什么20220123出现的不是两个顺子呢p>
这个用笔写就好了,很快,如果012也算的话应该是14个,否则就是4个,分别是20220123,20221123,20221230,20221231.
我就写了四个,不知道老师按哪个改了。
试题 C: 刷题统计
时间限制: 1.0s
内存限制: 256.0MB
本题总分:10 分
【问题描述】
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天
做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在
第几天实现做题数大于等于 n 题p>
【输入格式】
输入一行包含三个整数 a, b 和 n.
【输出格式】
输出一个整数代表天数。
【样例输入】
10 20 99
【样例输出】
8
#include
int main(){
int a,b,n,ans,sum,i,w;
scanf(“%d%d%d”,&a,&b,&n);
sum=0;
w=1;
for(i=1;;i++){
if(w
sum+=a;
}
else{
sum+=b;
}
if(sum>=n){
printf(“%d”,i);
break;
}
w++;
if(w>7){
w=1;
}
}
return 0;
}
这题比计蒜客的阴历阳历放假要简单,只要考虑好一周的循环就好。
试题 D: 修剪灌木
时间限制: 1.0s
内存限制: 256.0MB
本题总分:10 分
【问题描述】
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌
木,让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,
每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开
始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。在第一天的
早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
【输入格式】
一个正整数 N ,含义如题面所述。
【输出格式】
输出 N 行,每行一个整数,第行表示从左到右第 i 棵树最高能长到多高。
【样例输入】
3
【样例输出】
4
2
4
#include
char s[20];
int main(){
int n,i;
scanf(“%d”,&n);
for(i=1;i
if(i
s[i]=(n-i)*2;
}
else{
s[i]=(i-1)*2;
}
}
for(i=1;i
printf(“%dn”,s[i]);
}
return 0;
}
这道题我们画几个就可以发现规律,在前半部分的最长其实就是他剩余部分的两倍,后半部分也是这样。
试题 E: X 进制减法
时间限制: 1.0s
内存限制: 256.0MB
本题总分:15 分
【问题描述】
进制规定了数字在数位上逢几进一。
X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某
种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则
X 进制数 321 转换为十进制数为 65。
现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确
定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进
制。请你算出 A ? B 的结果最小可能是多少。
请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数
字要小于其进制。
【输入格式】
第一行一个正整数 N,含义如题面所述。
第二行一个正整数 Ma,表示 X 进制数 A 的位数。
第三行 Ma 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各
个数位上的数字在十进制下的表示。
第四行一个正整数 Mb,表示 X 进制数 B 的位数。
第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各
个数位上的数字在十进制下的表示。
请注意,输入中的所有数字都是十进制的。
【输出格式】
输出一行一个整数,表示 X 进制数 A ? B 的结果的最小可能值转换为十进
制后再模 1000000007 的结果。
试题E: X进制减法
6第十三届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组
【样例输入】
11
3
10 4 0
3
1 2 0
【样例输出】
94
#include
#include
int max(int a,int b){
if(a>=b&&a>2){
return a+1;
}
else if(b>2&&b>a){
return b+1;
}
else{
return 2;
}
}
char a[20];
char b[20];
char m[20];
int main(){
int n,ma,mb,i,jg,sum,sum1,m1,m2,j;
int s[20]={1,1,1,1,1};
m1=1;
m2=1;
sum=0;
sum1=0;
scanf(“%d”,&n);
scanf(“%d”,&ma);
for(i=0;i scanf(“%d”,&a[i]); } scanf(“%d”,&mb); for(i=0;i scanf(“%d”,&b[i]); } for(i=0;i m[i]=max(a[i],b[i]); //printf(“%dn”,m[i]); } for(i=0;i for(j=i+1;j s[i]*=m[j]; } } for(i=0;i sum+=(a[i]*s[i]); sum1+=(b[i]*s[i]); } jg=sum-sum1; printf(“%d”,jg); return 0; } 这道题我感觉我写的复杂了,可能时间复杂度会高些。 题目要求我们找到最小的A-B最小的结果,根据X进制要求我们只需要找到A和B相同位数的最大值即可,注意不能小于2,然后相乘即可。 试题 F: 统计子矩阵 时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分 【问题描述】 给定一个 N × M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 × 1,最大 N × M) 满足子矩阵中所有数的和不超过给定的整数 Kp> 【输入格式】 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数,代表矩阵 A. 【输出格式】 一个整数代表答案。 【样例输入】 3 4 10 1 2 3 4 5 6 7 8 9 10 11 12 【样例输出】 19 【样例说明】 满足条件的子矩阵一共有 19,包含: 大小为 1 × 1 的有 10 个。 大小为 1 × 2 的有 3 个。 试题 F: 统计子矩阵 8第十三届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组 大小为 1 × 3 的有 2 个。 大小为 1 × 4 的有 1 个。 大小为 2 × 1 的有 3 个 #include char s[20][20]; int main(){ int m,n,k,sum,ans,i,j,w,q,ans1,ans2; ans1=0; sum=0; ans=0; ans2=0; scanf(“%d%d%d”,&m,&n,&k); for(i=0;i for(j=0;j scanf(“%d”,&s[i][j]); } } for(i=0;i for(j=0;j //sum=0; for(w=i;w sum=0; for(q=j;q sum+=s[w][q]; if(sum
ans++; } } } } break; } for(j=0;j for(i=0;i //sum=0; for(q=j;q sum=0; for(w=i;w sum+=s[w][q]; if(sum
ans1++; } } } } break; } for(i=0;i for(j=0;j if(s[i][j]
ans2++; } } } printf(“%d”,ans+ans1-ans2); return 0; } 这道题有点难,考试就不会了,(我实属菜鸡)现在写出来的也不知道能不能在规定时间跑出来。 主要要注意sum=0的位置。 试题 G: 积木画 时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分 【问题描述】 小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型(大小为 3 个单位面积): 同时,小明有一块面积大小为 2 × N 的画布,画布由 2 × N 个 1 × 1 区域构 成。小明需要用以上两种积木将画布拼满,他想知道总共有多少种不同的方式p> 积木可以任意旋转,且画布的方向固定。 【输入格式】 输入一个整数 N,表示画布大小。 【输出格式】 输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取 模后的值 #include int maxn=10000; long mod=1000000007; int main(){ int i,n; char f[maxn]; char g[maxn]; f[0]=1; f[1]=1; f[2]=2; g[0]=0; g[1]=1; //char f[maxn]; //char g[maxn]; scanf(“%d”,&n); for(i=2;i
f[i]=f[i-1]%mod+f[i-2]%mod+2*g[i-2]%mod; g[i]=f[i-1]%mod+g[i-1]%mod; } printf(“%d”,f[n]); return 0; } 这题代码量少了很多,但是我感觉这个dp 动态规划还是很难的,后来看了其他大佬的写法才慢慢想明白(属实不易)这题难就难在三个角的形状怎么弄,后来又听说洛谷有差不多的题还是原题。 试题 H: 扫雷 时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分 【问题描述】 小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下, 在一个二维平面上放置着 n 个炸雷,第 i 个炸雷 (xi, yi,ri) 表示在坐标 (xi, yi) 处 存在一个炸雷,它的爆炸范围是以半径为 ri 的一个圆。 为了顺利通过这片土地,需要玩家进行排雷。玩家可以发射 m 个排雷火 箭,小明已经规划好了每个排雷火箭的发射方向,第 j 个排雷火箭 (xj, yj,rj) 表 示这个排雷火箭将会在 (xj, yj) 处爆炸,它的爆炸范围是以半径为 rj 的一个圆, 在其爆炸范围内的炸雷会被引爆。同时,当炸雷被引爆时,在其爆炸范围内的 炸雷也会被引爆。现在小明想知道他这次共引爆了几颗炸雷p> 你可以把炸雷和排雷火箭都视为平面上的一个点。一个点处可以存在多个 炸雷和排雷火箭。当炸雷位于爆炸范围的边界上时也会被引爆。 【输入格式】 输入的第一行包含两个整数 n、m. 接下来的 n 行,每行三个整数 xi, yi,ri,表示一个炸雷的信息。 再接下来的 m 行,每行三个整数 xj, yj,rj,表示一个排雷火箭的信息。 【输出格式】 输出一个整数表示答案 #include #include int res=0; int n; struct boom{ double x;//n雷m火箭 double y; double r; int k; }a[10086]; int xiu(int x,int y,int r){ int i; for(i=0;i if(pow(a[i].x-x,2)+pow(a[i].y-y,2)
res++; a[i].k=1; xiu(a[i].x,a[i].y,a[i].r); } } } int main(){ int m,i,x,y,r; scanf(“%d%d”,&n,&m); for(i=0;i scanf(“%lf%lf%lf”,&a[i].x,&a[i].y,&a[i].r); a[i].k=0; } for(i=0;i scanf(“%d%d%d”,&x,&y,&r); xiu(x,y,r); } printf(“%d”,res); return 0; } 这道题巧用递归 试题 I: 李白打酒加强版 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分 【问题描述】 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店 N 次,遇到花 M 次。已知最后一次遇到的是花, 他正好把酒喝光了。 请你计算李白这一路遇到店和花的顺序,有多少种不同的可能p> 注意:壶里没酒 ( 0 斗) 时遇店是合法的,加倍后还是没酒;但是没酒时遇 花是不合法的。 【输入格式】 第一行包含两个整数 N 和 M. 【输出格式】 输出一个整数表示答案。由于答案可能很大,输出模 1000000007 的结果。 #include int ans=0; long long e=10e9+7; int main(){ int n,m;//n*2,m-1 scanf(“%d%d”,&n,&m); fun(2,n,m-1); printf(“%d”,ans%e); return 0; } void fun(int x,int n,int m){ if(x==1&&n==0&&m==0) { ans++; } if(n>0) { fun(x*2,n-1,m); } if(m>0) { fun(x-1,n,m-1); } } 接着递归 ,参照其他大佬的(菜鸡属实不易) 试题 J: 砍竹子 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分 【问题描述】 这天,小明在砍竹子,他面前有 n 棵竹子排成一排,一开始第 i 棵竹子的 高度为 hi. 他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用,假设这一段竹子的高度为 H,那么使用一次魔法可以 把这一段竹子的高度都变为 ? √? H 2 ? + 1?,其中 ?x? 表示对 x 向下取整。小明想 知道他最少使用多少次魔法可以让所有的竹子的高度都变为 1 这题我觉得应该还是先用几个数组来找到连续一段相同的,太难了。 文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览35161 人正在系统学习中 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!