第七届蓝桥杯省赛

煤球数目(暴力)

Description

有一堆煤球,堆成三角棱锥形。具体:

第一层放1个,

第二层3个(排列成三角形),

第三层6个(排列成三角形),

第四层10个(排列成三角形),…

如果一共有100层,共有多少个煤球?

请填表示煤球总数目的数字。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

Input

Output
仅仅填写一个整数(填空题不填写代码),表示煤球总数目的数字。

代码

#include<iostream>
#include<stdio.h>
using namespace std;

int main(){
	long long ans=0;
	int k=0;
    for(int i=1;i<=100;i++){
    	k+=i;
    	ans+=k;
	}
	cout<<ans;
    return 0;
}

生日蜡烛(暴力)

Description

某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他一共吹熄了236根蜡烛。

请问,他从多少岁开始过生日party的?

请填写他开始过生日party的年龄数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

Input

Output
输出一个整数。开始过生日party的年龄数。

答案:

26

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
	
	for(int i=1;i<=236;i++){
		for(int j=i;j<=236;j++){
			int ans=0;
			for(int k=i;k<=j;k++){
				ans+=k;
			}
			if(ans==236){
				cout<<i;
				return 0;
			}
		}
	}
	
	
	
	return 0;
}

凑算式(暴力)

在这里插入图片描述
答案:

29

代码

#include<bits/stdc++.h>
using namespace std;

int a[10];
int main(){
	
	for(int i=1;i<=9;i++) a[i]=i;
	
	int cnt=0;
	do{
		int A=a[1],B=a[2],C=a[3],D=a[4]*100+a[5]*10+a[6],E=a[7]*100+a[8]*10+a[9];
		int x=B*E+C*D,y=(10-A)*C*E;
		if(x==y) cnt++;
		
	}while(next_permutation(a+1,a+10));
	cout<<cnt;
	return 0;
}

方格填数(暴力)

Description

如下的10个格子

填入0~9的数字。要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻)

一共有多少种可能的填数方案?

请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

image.png

Input

答案:

1580

代码

#include<bits/stdc++.h>
using namespace std;

int a[4][5];
int b[10];
int x[8]={1,0,-1,0,1,1,-1,-1},y[8]={0,1,0,-1,1,-1,1,-1};

bool check(){
	for(int i=1;i<=3;i++){
			for(int j=1;j<=4;j++){
				if(a[i][j]==100) continue;
				for(int k=0;k<8;k++){
				int xx=i-x[k],yy=j-y[k];
				if(xx>0&&yy>0&&xx<=3&&yy<=4){
					if(a[xx][yy]==a[i][j]-1) return false;
					if(a[xx][yy]==a[i][j]+1) return false;
				}
				}
			}
		}
		return true;
}
int main(){
	
	for(int i=0;i<=9;i++) b[i]=i;
	a[1][1]=100,a[3][4]=100;
	
	int ans=0;
	do{
		int num=0;
		for(int i=1;i<=3;i++){
			for(int j=1;j<=4;j++){
				if(a[i][j]==100) continue;
				a[i][j]=b[num++];
			}
		}
		//cout<<num<<endl;
		if(check()){
			ans++;
		}
	}while(next_permutation(b,b+10));
	cout<<ans;
	return 0;
}

剪邮票(DFS)

Description

如图1,有12张连在一起的12生肖的邮票。

现在你要从中剪下5张来,要求必须是连着的。

(仅仅连接一个角不算相连)

比如,图2,图3中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

在这里插入图片描述

Input

Output
输出一个整数。表示方案数目。

答案:

116

代码

#include<bits/stdc++.h>
using namespace std;

int aa[4][5];
int ba[13];
bool v[13],g[4][5];
int h[4]={0,0,-1,1},l[4]={1,-1,0,0};
int ans;

void dfs(int x,int y){
	g[x][y]=true;
	if(ans==5) return ;
	for(int i=0;i<4;i++){
		int xx=x-h[i],yy=y-l[i];
		if(v[aa[xx][yy]]&&!g[xx][yy]&&xx>0&&yy>0&&xx<=3&&yy<=4) ans++,dfs(xx,yy);
	}
	return;
}

int main(){
	
	for(int i=1;i<=12;i++) ba[i]=i;
	int num=1;
	for(int i=1;i<=3;i++)
	  for(int j=1;j<=4;j++) aa[i][j]=num++;
	
	int an=0;
	for(int a=1;a<13;a++)
	for(int b=1;b<13&&a!=b;b++)
	for(int c=1;c<13&&c!=a&&c!=b;c++)
	for(int d=1;d<13&&d!=a&&d!=b&&d!=c;d++)
	for(int e=1;e<13&&e!=a&&e!=b&&e!=c&&e!=d;e++){
	
		memset(v,0,sizeof v);
		memset(g,0,sizeof g);
		ans=1;
		
		v[a]=v[b]=v[c]=v[d]=v[e]=true;
		
		int x,y;
		bool A=0;
		for(int i=1;i<=3;i++){
			for(int j=1;j<=4;j++){
				if(v[aa[i][j]]) x=i,y=j,A=1;
				if(A) break;
			}
			if(A) break;
		}
		
		dfs(x,y);
		if(ans==5) an++; 
}
	cout<<an;
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值