第七届蓝桥 java与C++ B组 填空题

一:

煤球数目

有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
....
如果一共有100层,共有多少个煤球?

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

代码:

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int sum=1;
    int summ=1;//注意这里初始值均为1
    for(int i=2;i<=100;i++)
    {
        sum+=i;
        summ+=sum;
    }
    cout<<summ<<endl;
    return 0;
}


//171700

二:

生日蜡烛

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

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

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

请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

代码:

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int flag=0;
    for(int i=1;i<=100;i++)//从第一岁开始试
    {
        int sum=0;//注意把sum=0这一条件放在第一个for循环内
         for(int j=i;j<=100;j++)
        {
            sum+=j;
            if(sum==236)
            {
                //flag=i;
                 cout<<i;
                break;
            }
        }
    }


    return 0;
}

三:

凑算式

     B      DEF
A + --- + ------- = 10
     C      GHI
     
(如果显示有问题,可以参见【图1.jpg】)
     
     
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

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

代码如下:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int ans=0;
int num[9];
bool vis[10];
void slove()
{
	if((num[0]+(double)num[1]/num[2] +(double)(num[3]*100+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8]))==10)//满足等式的话,个数加1 
	   ans++;
	return;
}
void dfs(int d)
{
	if(d==9)//九个数都填进去了 
	{
		slove();
		return;
	}
	for(int i=1;i<10;i++)
	{
		if(!vis[i])
		{
			vis[i]=true;
			num[d]=i;
			dfs(d+1);
			vis[i]=false;
		}
	}
}
int main()
{
      dfs(0);
      cout<<ans<<endl;
	return 0;
}

四:方格填数

方格填数

如下的10个格子
   +--+--+--+
   |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |
+--+--+--+

(如果显示有问题,也可以参看【图1.jpg】)

填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)

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

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

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int flag[3][4];//判断是否可以放数 
int a[3][4];//对每个位置进行放数 
int sum=0;int vis[10];
int s[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{-1,-1},{-1,1},{1,-1}};

void init()//对矩阵进行初始化 
{
	for(int i=0;i<=2;i++)
	   for(int j=0;j<=3;j++)
	      if(i==0&&j==0  || i==2&&j==3)//这两个位置不存在,所以不可以放数 
	           flag[i][j]=0;//0表示这里不能放数
			else
			   flag[i][j]=1;
	memset(vis,0,sizeof(vis));
	memset(a,0,sizeof(a)); 
}
void slove()
{
	int t=0;
	for(int i=0;i<=2;i++)
	  for(int j=0;j<=3;j++)
	  {
	     if(!flag[i][j])//不可以走的点 
		    continue;
		 for(int k=0;k<8;k++)
		 {
		 	int x=i + s[k][0];
		 	int y=j + s[k][1];
		 	 //判断是否越界
			if(x>=0&&x<=2&&y>=0&&y<=3&&flag[x][y]) 
			{
				//判断左右、上下或对角有数相邻
				if(abs(a[i][j]-a[x][y]==1)) 
				    t = 1;
			}
		 }	
	  }
	  if(!t)
	    sum++;
}
void dfs(int num)
{
	int r = num/4;//行
	int c = num%4;//列
	if(r>2)//表示已全部放满
	{
		slove();//进行判断
		return; 
	} 
	if(flag[r][c])
	{
		for(int i=0;i<10;i++)
		   if(!vis[i])
		   {
		   	vis[i]=1;
		   	a[r][c]=i;//对数组进行存数
			 dfs(num+1);
			 vis[i]=0; 
		   }
	}
	else
	  dfs(num+1);
}
int main()
{
    init();
    dfs(0);
    cout<<sum<<endl;
    return 0;	
} 

 五:抽签

抽签

X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
....

那么最终派往W星的观察团会有多少种国别的不同组合呢?

下面的程序解决了这个问题。
数组a[] 中既是每个国家可以派出的最多的名额。
程序执行结果为:
DEFFF
CEFFF
CDFFF
CDEFF
CCFFF
CCEFF
CCDFF
CCDEF
BEFFF
BDFFF
BDEFF
BCFFF
BCEFF
BCDFF
BCDEF
....
(以下省略,总共101行)


#include <stdio.h>
#define N 6
#define M 5
#define BUF 1024

void f(int a[], int k, int m, char b[])
{
    int i,j;
    
    if(k==N){ //k为a数组的下标,a数组都找完了之后
        b[M] = 0;
        if(m==0) printf("%s\n",b);//人数找够了
        return;
    }
    
    for(i=0; i<=a[k]; i++){
        for(j=0; j<i; j++) b[M-m+j] = k+'A';
        __________________________;  //填空位置       f(a,k+1,m-i,b)
    }
}
int main()
{    
    int  a[N] = {4,2,2,1,1,3};
    char b[BUF];
    f(a,0,M,b);        //数组名,数组位置,要多少人,对应的字母
    return 0;
}

仔细阅读代码,填写划线部分缺少的内容。

注意:不要填写任何已有内容或说明性文字。
 

 

六:剪邮票

参考来自:https://blog.csdn.net/u014552756/article/details/50946197

剪邮票

如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

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

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

思路:这里就是用到搜索,寻找五块相连的方格。先找到一个五个数的组合,通过上下左右移动看能否检测到这五个数,若是可以则种类加1。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值