根据图形所给出的规律及语言描述提示用C/C++(不能用库函数)编写代码实现其功能。(欢迎大家提出意见与写出更好的代码)
1、
Please input a number:10
1 2 6 7 15 16 28 29 45 46
3 5 8 14 17 27 30 44 47 64
4 9 13 18 26 31 43 48 63 65
10 12 19 25 32 42 49 62 66 79
11 20 24 33 41 50 61 67 78 80
21 23 34 40 51 60 68 77 81 90
22 35 39 52 59 69 76 82 89 91
36 38 53 58 70 75 83 88 92 97
37 54 57 71 74 84 87 93 96 98
55 56 72 73 85 86 94 95 99 100
代码1如下:
#include<iostream>
#define MAX_LENGTH 10
using namespace std;
int main()
{
int a[MAX_LENGTH][MAX_LENGTH]={0};
a[0][0] = 1;
int i = 0,j = 0,k = 1,f = 0;
while(k < MAX_LENGTH * MAX_LENGTH)
{
while (i!=f)
{
a[--i][++j]=++k; //left and down
}
if (j<MAX_LENGTH-1)
{
a[i][++j]=++k; //right
}
else
{
a[++i][j]=++k; //down
++f;
}
while (j!=f)
{
a[++i][--j]=++k; //right and down
}
if (i<MAX_LENGTH-1)
{
a[++i][j]=++k; //down
}
else
{
a[i][++j]=++k; //right
++f;
}
}
for(i = 0;i < MAX_LENGTH; i++)
{
for(j = 0; j < MAX_LENGTH; j++)
{
cout << a[i][j] << "\t";
}
cout << endl;
}
return 0;
}
这个自己没有自己去输入一个数值进行构造,因为需要进行动态创建二维数组,这样写希望简单一点,但是思路是一样的。
代码2如下:
#include <iostream>
#define MAX_LENGTH 50
using namespace std;
int main()
{
int i,j,k,n,count;
int dada[MAX_LENGTH][MAX_LENGTH] = {0};
printf("Input n(0~%d):",MAX_LENGTH);
scanf("%d",&n);
count = 1;
for(i=1;i<=2*n-1;i++)
{
for (j=1;j<=n;j++)
{
for (k=1;k<=n;k++)
{
if (j+k == i+1)
{
if(i%2)
dada[k][j] = count++;
else
dada[j][k] = count++;
break;
}
}
}
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
cout<<dada[i][j]<<"\t";
}
cout << endl;
}
return 0;
}
此程序看起来比较容易理解,但是时间复杂度比较高。