给出数字n和一个从1到n ^ 2的数字序列,如何将其拆分为n个子序列,因此所有子序列的总和和长度都为n?
例如,如果n = 3,答案可能是:
3 4 8 = 15
2 6 7 = 15
1 5 9 = 15
答案 0 :(得分:0)
因此,我认为可以通过很少观察该问题来解决此问题。
例如,假设我们有n=3
。然后n^2=9
。
现在1 to 9
= 9 * (9+1) / 2
= 45
中所有数字的总和。
因此,现在我们可以将45分为三个相等的组,每个组具有sum = 45/3 = 5
。
类似地:-
n = 4, sum of 1 to 16 numbers = 16 * 17/2 = 136. each group sum = 136/4 = 34.
n = 5, sum of 1 to 25 numbers = 25 * 26/2 = 25*13. each group sum = 25*13/5 = 65.
现在,我们知道每个组的总和是什么,以便将数字分成n个子序列。
现在,我们得出的另一个观察结果是我们的n是odd
还是even
。
n为偶数时,拆分非常容易。
n = 2, so we have numbers 1 to 4.
1 4
2 3.
我们假设矩阵为n x n,在上述情况下为2 x 2。
Rules for even n:-
1. Keep a counter = 1.
2. Fill the first column (1 to n), incrementing the counter by 1.
3. When we reach at the bottom of the column, for column 2, we do a reverse iteration (n to 1) and fill them with counter by incrementing it by 1.
您可以通过取n = 2,4,6 ...并填充数组来验证该技术是否有效。
现在让我们看看如何将n x n填充为n个奇数。
Rules for odd n:-
1. Keep a counter = 1.
2. Fill the first column (1 to n), incrementing the counter by 1.
3. Now this case is slightly different from even case, from the next column onwards,
we don't reverse our calculation from n to 1 but we keep moving ahead in column.
Let's understand this step by looking at an example.
让我们取n = 3。
我们的第一列将是1,2,3。
现在第二列我们从底部列开始,在我们的示例中为3。
用值n = 3
填充4
。下一行= (n+1)%n = 0
,将得到5
,下一行= (n+1+1)%n = 1
,将得到值6
。现在,所有列2
的值都已填满,让我们移至下一列,即第三列。
我们将从行= 1开始,因此第1行第3列将得到7,然后第2行第3列将得到8,然后第0行第3列将得到9。
希望这会有所帮助!