您的位置:首页 > 编程语言 > Java开发

蓝桥杯第七届省赛java A组

2017-03-08 20:07 337 查看
1.煤球数目

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

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

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

送分题,用循环即可。

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = new int[101];
int sum = 0;
for(int i=1; i<=100; i++)
{
a[i] = (i)*(i+1)/2;			//等差数列求和公式
//			a[i] = a[i-1]+i;			第二种做法  第i层 = 第i-1层 + 层数
sum += a[i];
}
System.out.println(sum);		//171700
}


结果是171700

2.生日蜡烛

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

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

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

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

想法:大概限定下年龄范围,还是简单的循环

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1; i<=100; i++)
{
int sum = 0;
for(int j=i; j<=100; j++)			//从1开始加起
{
sum += j;
if(sum==236){
System.out.println(i);		//起始年龄数
System.out.println(j);		//结束年龄数
}
}
}
}

}


结果是36

3.搭积木

小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。

搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。

下面是两种合格的搭法:

    0
  1 2
 3 4 5
6 7 8 9

     0
   3 1
  7 5 2
9 8 6 4 

请你计算这样的搭法一共有多少种?

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

想法:本质上是一个判断条件的全排列问题

public class Main {

static int count = 0
4000
;

public static boolean judge(int[] a) {
if (a[0]<a[1]&&a[0]<a[2]&&a[1]<a[3]&&a[1]<a[4]
&&a[2]<a[4]&&a[2]<a[5]&&a[3]<a[6]&&a[3]<a[7]
&&a[4]<a[7]&&a[4]<a[8]&&a[5]<a[8]&&a[5]<a[9]) {
return true;
}else {
return false;
}

}

public static void swap(int[] a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}

public static void Perm(int[] a,int size,int index)
{
if(index >= size && judge(a)==true)
{
count++;
return;
}
for(int i=index; i<size; i++)
{
swap(a,i,index);
Perm(a,size,index+1);
swap(a,i,index);
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = {1,2,3,4,5,6,7,8,9,10};
int n = 10;
Perm(a,10,0);
System.out.println(count);
}

}


结果:768

4.分小组

9名运动员参加比赛,需要分3组进行预赛。
有哪些分组的方案呢?

我们标记运动员为 A,B,C,... I
下面的程序列出了所有的分组方法。

该程序的正常输出为:
ABC DEF GHI
ABC DEG FHI
ABC DEH FGI
ABC DEI FGH
ABC DFG EHI
ABC DFH EGI
ABC DFI EGH
ABC DGH EFI
ABC DGI EFH
ABC DHI EFG
ABC EFG DHI
ABC EFH DGI
ABC EFI DGH
ABC EGH DFI
ABC EGI DFH
ABC EHI DFG
ABC FGH DEI
ABC FGI DEH
ABC FHI DEG
ABC GHI DEF
ABD CEF GHI
ABD CEG FHI
ABD CEH FGI
ABD CEI FGH
ABD CFG EHI
ABD CFH EGI
ABD CFI EGH
ABD CGH EFI
ABD CGI EFH
ABD CHI EFG
ABD EFG CHI
..... (以下省略,总共560行)。

public class A
{
public static String remain(int[] a)
{
String s = "";
for(int i=0; i<a.length; i++){
if(a[i] == 0) s += (char)(i+'A');
}
return s;
}

public static void f(String s, int[] a)
{
for(int i=0; i<a.length; i++){
if(a[i]==1) continue;
a[i] = 1;
for(int j=i+1; j<a.length; j++){
if(a[j]==1) continue;
a[j]=1;
for(int k=j+1; k<a.length; k++){
if(a[k]==1) continue;
a[k]=1;
System.out.println(__________________________________); //填空位置
a[k]=0;
}
a[j]=0;
}
a[i] = 0;
}
}

public static void main(String[] args)
{
int[] a = new int[9];
a[0] = 1;
for(int b=1; b<a.length; b++){
a[b] = 1;
for(int c=b+1; c<a.length; c++){
a[c] = 1;
String s = "A" + (char)(b+'A') + (char)(c+'A');
f(s,a);
a[c] = 0;
}
a[b] = 0;
}
}
}


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

答案:
System.out.println(s+" "+(char)(i+'A')+(char)(j+'A')+(char)(k+'A')+" "+remain(a));

思路:题目类似全排列,因为是填空题,有时根据前给出的前两种组合基本上就能判断出应该填什么,譬如第一行是 ABC DEF GHI,我们只要根据按照给出的代码逻辑往下推,完善代码就可以。

5.抽签
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行)

public class A
{
public static void f(int[] a, int k, int n, String s)
{
if(k==a.length){
if(n==0)
System.out.println(s);
return;
}

String s2 = s;
for(int i=0; i<=a[k]; i++){
_____________________________;   //填空位置
s2 += (char)(k+'A');
}
}

public static void main(String[] args)
{
int[] a = {4,2,2,1,1,3};

f(a,0,5,"");
}
}


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

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

答案:

思路:还是一道排列+深搜问题f(a,i+1,n-k,s2);

填空题显然填的是递归,同上,因为是填空题,所以先努力推出第一种情况,基本就离正确答案也就不远了。

6.寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:

□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □

每个方块代表1~13中的某一个数字,但不能重复。
比如:
6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5

以及: 
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5

就算两种解法。(加法,乘法交换律后算不同的方案)

你一共找到了多少种方案?

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

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  竞赛 蓝桥杯 Java