第八届蓝桥杯(国赛)

1、平方十位数

由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。这其中也有很多恰好是平方数(是某个数的平方)。比如:1026753849,就是其中最小的一个平方数。请你找出其中最大的一个平方数是多少?注意:你需要提交的是一个10位数字,不要填写任何多余内容。

结果:19028547136
0-9进行全排列,组成十位数字,Math中sqrt函数,是否是整数,判断

static int arr[]= {9,8,7,6,5,4,3,2,1,0};
	static int visited[]= {0,0,0,0,0,0,0,0,0,0};
	public static void main(String[] args) {
		dfs(0);
	}
	public static void dfs(int offset) {
		if(offset==10) {
			long a=01;
			for(int i=0;i<10;i++)
			{
				a=a*10+arr[i];
			}
			long sq=(long)Math.sqrt(a);
			if(sq*sq==a)
			{
				System.out.println(a);
				return;
			}
		}
		for(int i=0;i<10;i++)
		{
			if(visited[i]==0)
			{
				visited[i]=1;
				arr[offset]=i;
				dfs(offset+1);
				visited[i]=0;
			}
		}
	}
	

2、生命游戏
康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。
这个游戏在一个无限大的2D网格上进行。
初始时,每个小方格中居住着一个活着或死了的细胞。
下一时刻每个细胞的状态都由它周围八个格子的细胞状态决定。
具体来说:

  1. 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
  2. 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。
  3. 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
  4. 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)
    当前代所有细胞同时被以上规则处理后, 可以得到下一代细胞图。按规则继续处理这一代的细胞图,可以得到再下一代的细胞图,周而复始。
    例如假设初始是:(X代表活细胞,.代表死细胞)


    .XXX.

下一代会变为:


…X…
…X…
…X…

康威生命游戏中会出现一些有趣的模式。例如稳定不变的模式:

.XX.
.XX.

还有会循环的模式:
… … …
.XX… .XX… .XX…
.XX… .X… .XX…
…XX. -> …X. -> …XX.
…XX. …XX. …XX.
… … …

本题中我们要讨论的是一个非常特殊的模式,被称作"Gosper glider gun":

…X…
…X.X…
…XX…XX…XX.
…X…X…XX…XX.
.XX…X…X…XX…
.XX…X…X.XX…X.X…
…X…X…X…
…X…X…
…XX…

假设以上初始状态是第0代,请问第1000000000(十亿)代一共有多少活着的细胞?

注意:我们假定细胞机在无限的2D网格上推演,并非只有题目中画出的那点空间。
当然,对于遥远的位置,其初始状态一概为死细胞。
注意:需要提交的是一个整数,不要填写多余内容。
(看着都难,放弃了)

发布了44 篇原创文章 · 获赞 2 · 访问量 540

猜你喜欢

转载自blog.csdn.net/qq_43699776/article/details/105292529