如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20行第 20 列的数是多少?
为了解出此问题,如果仅仅填写答案,则不需要编程实现:
观察数据后发现对角线数据之间的关系:
5 - 1 = 4
13 - 5 = 8
25 - 13 = 12
…
即差的差值是等差数列(4, 8, 12 ,16 …)
第一个数据是1;
第二个数据是5=1+4;
第三个数据是13=1+4+8;
第n个数据是
求n=20的值:
1+4*(1+19)*19/2=761。
如果仅仅需要得到数据:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,s=1;
for(i=1;i<20;i++)
{
s+=4*i;
}
printf("%d",s);
return 0;
}
具体数据全过程代码实现:(C++)
#include<iostream>
#include<iomanip>
using namespace std;
/*
1 2 6
3 5
4
*/
int main() {
int i = 0;
int j = 0;
int cnt = 2;
int a[250][250];
a[0][0] = 1;
while (cnt <1000)
{
j++;
while (i != -1 && j != -1)
{
a[i][j] = cnt++;
if (j == 0)
break;
i++;
j--;
}
i++;
while (i != -1 && j != -1)
{
a[i][j] = cnt++;
if (i == 0)
break;
i--;
j++;
}
}
for (int i = 0; i < 20 ;i++)
{
for (int j = 0; j < 20; j++)
{
cout << setw(5) << a[i][j] << ' ';
}
cout << '\n';
}
cout << a[19][19];
return 0;
}
(C):
#include <stdio.h>
#include <stdlib.h>
/*
1 2 6
3 5
4
*/
int main() {
int i = 0;
int j = 0;
int cnt = 2;
int a[250][250];
a[0][0] = 1;
while (cnt <1000)
{
j++;
while (i != -1 && j != -1)
{
a[i][j] = cnt++;
if(j == 0)
break;
i++;
j--;
}
i++;
while (i != -1 && j != -1)
{
a[i][j] = cnt++;
if (i == 0)
break;
i--;
j++;
}
}
for (int i = 0; i < 20 ;i++)
{
for (int j = 0; j < 20; j++)
{
printf("%4d ",a[i][j]);
}
printf("\n");
}
printf("%4d ",a[19][19]);
return 0;
}
欢迎大家留言探讨。