|---|---|---|---|---|
| 1 | 1 | 3 | 5 | 1 |
|---|---|---|---|---|
| 3 | 3 | 2 | 0 | 3 |
|---|---|---|---|---|
| 3 | 0 | 3 | 2 | 3 |
|---|---|---|---|---|
| 1 | 4 | 0 | 3 | 3 |
|---|---|---|---|---|
| 3 | 3 | 3 | 1 | 1 |
|---|---|---|---|---|
(图1)
图1展示了一个正方形,每一行、每一列和两个对角线都可以读作一个五位素数。行从左到右读取,列从上到下读取,两个对角线都是从左到右读取。根据输入文件INPUT.TXT中的数据,编写一个程序来构建这样的正方形。
素数必须具有相同的数字总和(例如示例中的11)。正方形左上角的数字是预先确定的(例如示例中为1)。
同一个正方形中可能会使用多次素数。
如果有多种解决方案,则必须全部呈现出来。一个五位素数不能以零开头,即00003不是一个五位素数。
输入数据
11 1
我正在尝试解IOI'94竞赛的问题-问题3-质数。
我已经构建了大部分辅助函数...
- 使用埃拉托斯特尼筛选法生成5位素数(在9999和100000之间)
- 构建一个计算数字总和的函数(12345 = 1+2+3+4+5 = 15)
- 构建一个检查数组是否整体数字总和相等的函数
- 构建一个检查数字是否以指定数字开头的函数(startWith(12345,1)返回true)
问题:我的问题是我不知道如何填充数组或使用回溯能力进行持续的检查:(。有谁可以帮助我吗?我该如何填充二维数组,以便它包含来自素数表的值,并且所有角度上的数字总和都正确?
*NB: 生成5位素数的埃拉托斯特尼筛法方法也有过滤以X开头并且总和等于M的值的能力*
完整问题:http://olympiads.win.tue.nl/ioi/ioi94/contest/day1prb3/problem.html
添加值的潜在顺序,只是不知道如何实现:(。
1 2 3 4 5
6 13 14 12 15
7 16 11 18 19
8 10 20 22 23
9 17 21 24 25