蓝桥杯校赛第十二届第二期模拟赛 c语言

1 请问在 1 到 2020 中,有多少个数既是 4 的整数倍,又是 6 的整数倍。
#include <stdio.h>
int main()
{ int a=0,b=0;
while(a++<2021)
if(a%4 ==0&&a%6 ==0) b++;
printf("%d\n",b);
return 0;
}
168

2 小明要用二进制来表示 1 到 10000 的所有整数,要求不同的整数用不同的二进制数表示,请问,为了表示 1 到 10000 的所有整数,至少需要多少个二进制位?
#include <stdio.h>
int main()
{ int a=1,b=2;
while(b<10000)
{ b=b*2; a++; }
printf("%d\n",a);
return 0;
}
14

3 请问有多少个序列满足下面的条件:
  1. 序列的长度为 5。
  2. 序列中的每个数都是 1 到 10 之间的整数。
3. 序列中后面的数大于等于前面的数。
#include <stdio.h>
main()
{ int a,b,c,d,e,sum=0;
for(a=1;a<11;a++)
for(b=a;b<11;b++)
for(c=b;c<11;c++)
for(d=c;d<11;d++)
for(e=d;e<11;e++)
{ sum++; //printf("%d %d %d %d %d\n",a,b,c,d,e); }
printf("%d\n",sum);
}
2002

4 一个无向图包含 2020 条边,如果图中没有自环和重边,请问最少包含多少个结点? 无向图:任意两个顶点之间都存在边
#include <stdio.h>
int main()
{ int a=2,b=1;
while(b<2020) b+=a++;
printf("%d\n",a);
return 0;
}
65

5 两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的距离为 2,L 和 Q 的距离为 5。
  对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。
  例如:ZOO 的内部距离为 22,其中 Z 和 O 的距离为 11。
请问,LANQIAO 的内部距离是多少?
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{ int a,b,d=0; char c[50];
gets©;
for(a=0;a<strlen©;a++)
for(b=a+1;b<strlen©;b++)
d+=abs(c[a]-c[b]);
printf("%d\n",d);
return 0;
}
162

6 给定一个平行四边形的底边长度 l 和高度 h,求平行四边形的面积。
输入格式
  输入的第一行包含一个整数 l,表示平行四边形的底边长度。
  第二行包含一个整数 h,表示平行四边形的高。
输出格式
  输出一个整数,表示平行四边形的面积。(提示:底边长度和高都是整数的平行四边形面积为整数)
样例输入
2
7
样例输出
14
数据规模和约定
对于所有评测用例,1 <= l, h <= 100。
#include <stdio.h>
int main()
{ int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a*b);
return 0;
}

7 现在时间是 a 点 b 分,请问 t 分钟后,是几点几分?
输入格式
  输入的第一行包含一个整数 a。
  第二行包含一个整数 b。
  第三行包含一个整数 t。
输出格式
  输出第一行包含一个整数,表示结果是几点。
  第二行包含一个整数,表示结果是几分。
样例输入
3
20
165
样例输出
6
5
样例输入
3
20
175
样例输出
6
15
数据规模和约定
  对于所有评测用例,0 <= a <= 23, 0 <= b <= 59, 0 <= t, t 分钟后还是在当天。
#include <stdio.h>
int main()
{ int a,b,c;
scanf("%d%d%d",&a,&b,&c);
b+=c;
while(b>60) { a++; b-=60; }
printf("%d\n%d\n",a,b);
return 0;
}

8 小蓝负责花园的灌溉工作。
  花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。
  小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。
  每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。
  给定花园水管的位置,请问 k 分钟后,有多少个方格被灌溉好?
输入格式
  输入的第一行包含两个整数 n, m。
  第二行包含一个整数 t,表示出水管的数量。
  接下来 t 行描述出水管的位置,其中第 i 行包含两个数 r, c 表示第 r 行第 c 列有一个排水管。
  接下来一行包含一个整数 k。
输出格式
  输出一个整数,表示答案。
样例输入
3 6
2
2 2
3 4
1
样例输出
9
样例说明
  用1表示灌溉到,0表示未灌溉到。
  打开水管时:
  000000
  010000
  000100
  1分钟后:
  010000
  111100
  011110
  共有9个方格被灌溉好。
数据规模和约定
对于所有评测用例,1 <= n, m <= 100, 1 <= t <= 10, 1 <= k <= 100。
#include <stdio.h>
int a[1000][100],n,m,t,k1,k2=1,sum=0;
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};

tt(int y,int x,int k2)
{ int i,y1,x1;
for(i=0;i<4;i++)
{ x1=x+dx[i]; y1=y+dy[i];
if(x1>m-1||x1<0||y1>n-1||y1<0) continue;
else if(a[y1][x1]==k2) continue;
else a[y1][x1]=k2+1; }
}

dfs(int k2)
{ int i,j;
if(k2==k1+1) return;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(a[i][j]==k2) tt(i,j,k2);
dfs(k2+1);
}

check()
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(a[i][j]) sum++;
printf("%d\n\n",sum);
/*
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ printf("%d ",a[i][j]);
if(j==m-1) putchar(10); }
*/
}

main()
{ int b,c,d=0;
scanf("%d%d%d",&n,&m,&t);
while(d++<t)
{ scanf("%d%d",&b,&c);
a[b-1][c-1]=1; }
scanf("%d",&k1);
dfs(k2); check();
}

9 小蓝有一张黑白图像,由 nm 个像素组成,其中从上到下共 n 行,每行从左到右 m 列。每个像素由一个 0 到 255 之间的灰度值表示。
  现在,小蓝准备对图像进行模糊操作,操作的方法为:
  对于每个像素,将以它为中心 3
* 3 区域内的所有像素(可能是 9 个像素或少于 9 个像素)求和后除以这个范围内的像素个数(取下整),得到的值就是模糊后的结果。
  请注意每个像素都要用原图中的灰度值计算求和。
输入格式
  输入的第一行包含两个整数 n, m。
  第 2 行到第 n + 1 行每行包含 m 个整数,表示每个像素的灰度值,相邻整数之间用一个空格分隔。
输出格式
  输出 n 行,每行 m 个整数,相邻整数之间用空格分隔,表示模糊后的图像。
样例输入
3 4
0 0 0 255
0 0 255 0
0 30 255 255
样例输出
0 42 85 127
5 60 116 170
7 90 132 191
数据规模和约定
  对于所有评测用例,1 <= n, m <= 100。
#include <stdio.h>
int a[100][100],b[100][100],n,m;
int dx[]={-1,1,0,0,-1,1,-1,1},dy[]={0,0,-1,1,-1,-1,1,1};

cl()
{ int i,j,k,x1,y1,num,sum;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ for(k=0,num=1,sum=a[i][j];k<8;k++)
{ y1=i+dy[k]; x1=j+dx[k];
if(x1>m-1||x1<0||y1>n-1||y1<0) continue;
else { sum+=a[y1][x1]; num++; }
}
b[i][j]=sum/num;
}
}

sc()
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ printf("%d ",b[i][j]);
if(j==m-1) putchar(10); }
}

main()
{ int b,c;
scanf("%d%d",&n,&m);
for(b=0;b<n;b++)
for(c=0;c<m;c++)
scanf("%d",a[b]+c);
cl(); sc();
}

10 小蓝在一个 n 行 m 列的方格图中玩一个游戏。
  开始时,小蓝站在方格图的左上角,即第 1 行第 1 列。
  小蓝可以在方格图上走动,走动时,如果当前在第 r 行第 c 列,他不能走到行号比 r 小的行,也不能走到列号比 c 小的列。同时,他一步走的直线距离不超过3。
  例如,如果当前小蓝在第 3 行第 5 列,他下一步可以走到第 3 行第 6 列、第 3 行第 7 列、第 3 行第 8 列、第 4 行第 5 列、第 4 行第 6 列、第 4 行第 7 列、第 5 行第 5 列、第 5 行第 6 列、第 6 行第 5 列之一。
  小蓝最终要走到第 n 行第 m 列。
  在图中,有的位置有奖励,走上去即可获得,有的位置有惩罚,走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值,奖励为正,惩罚为负。
  小蓝希望,从第 1 行第 1 列走到第 n 行第 m 列后,总的权值和最大。请问最大是多少?
输入格式
  输入的第一行包含两个整数 n, m,表示图的大小。
  接下来 n 行,每行 m 个整数,表示方格图中每个点的权值。
输出格式
  输出一个整数,表示最大权值和。
样例输入
3 5
-4 -5 -10 -3 1
7 5 -9 3 -10
10 -2 6 -10 -4
样例输出
15
数据规模和约定
  对于30%的评测用例,1 <= n, m <= 10;
  对于50%的评测用例,1 <= n, m <= 20;
对于所有评测用例,1 <= n, m <= 100,-10000 <= 权值 <= 10000。
#include <stdio.h>
#define max(x,y) (x)>(y)?(x):(y) //int max(int x,int y) { return x>y?x:y; }
int a[101][101],b[101][101],n,m;

cl()
{ int i,j;
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
b[i][j]=-99999;
b[1][1]=a[1][1];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{ b[i][j]=max(b[i][j],max(b[i-1][j]+a[i][j],b[i][j-1]+a[i][j]));
// printf("\n%d %d\n",b[i-1][j],b[i][j-1]);
if(i>2&&j>2) b[i][j]=max(b[i][j],max(b[i-2][j]+a[i][j],b[i][j-2]+a[i][j]));
if(i>3&&j>3) b[i][j]=max(b[i][j],max(b[i-3][j]+a[i][j],b[i][j-3]+a[i][j])); }

/*putchar(10);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{ printf("%d ",b[i][j]);
if(j==m) putchar(10); } */

printf("%d\n",b[n][m]);
}

main()
{ int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",a[i]+j);
cl();
}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值