第十三届蓝桥杯模拟赛(第一期)题解-代码详解(C语言)
(1)枚举
#include <stdio.h>
#include <stdlib.h>
int main() {
int i=1000,n=9999,sum=0;
for(;i<=9999;i++){
if(i%128 == 0){
sum++;
}
}
printf("%d",sum);
return 0;
}
(2)枚举+多级判定
#include <stdio.h>
#include <stdlib.h>
int main() {
int i=1000,n=9999,sum=0;
for(;i<=n;i++){
if((i/1000 == i/10%10) && (i/100%10 == i%10-1) ){
sum++;
}
}
printf("%d",sum);
return 0;
}
(3)阶乘计算(可多方法)
#include <stdio.h>
#include <stdlib.h>
int fun(int n){
if(n==1){
return 1;
}
return fun(n-1)*n;
}
int main() {
int i=1000,n=9999,sum=0;
for(i=1;i<=21;i++){
if(i%2 == 0){
sum++;
}
}
printf("%d",sum);
printf("\n阶乘是:%d",fun(sum));
return 0;
}
(4)上台阶问题dfs
#include <stdio.h>
#include <stdlib.h>
int max = 0;
int T[16] = {0,1,2,1,1,1,1,5,5,4,-1,-1,-2,-3,-1,-9};
void fun(int i,int x,int sum){
if(i>=7){
return;
}
if(x == 15){
max = sum>max?sum:max;
return;
}
int j=0;
for(j=1;j<=4;j++){
fun(i+1,x+j,sum +=T[x+j]);
}
}
int main() {
fun(1,0,0);
printf("%d",max);
return 0;
}
(5)三层循环枚举
#include <stdio.h>
#include <stdlib.h>
int main() {
int a[20] = {2,9,17,4,14,10,25,26,11,14,16,17,14,21,16,27,32,20,26,36};
int i,j,k,sum=0;
for(i=0;i<18;i++){
for(j=i+1;j<19;j++){
for(k=j+1;k<20;k++){
if(a[i]<a[j] && a[j]<a[k]){
sum++;
}
}
}
}
printf("%d",sum);
return 0;
}
(6)速度计算
#include <stdio.h>
#include <stdlib.h>
int main() {
int t=0,v=0;
scanf("%d%d",&t,&v);
printf("%d",t*v);
return 0;
}
(7)棋盘颜色问题
观察可以知道奇数行对应的奇数列就是黑色块,偶数行对应的偶数列就是黑色的
#include <stdio.h>
#include <stdlib.h>
int main() {
int n=0,m=0,i=1,j=1,sum=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(i%2 != 0 && j%2 != 0){
sum++;
}else if(i%2 == 0 && j%2 == 0){
sum++;
}
}
}
printf("%d",sum);
return 0;
}
(8)(9)(10)下次更新
|