本来觉得没多大意思,不过经过慢慢的改写发现很有意思,哈哈。
程序核心就一个2层嵌套的for 我居然为了这个for写了好几十行....for嵌套一共才5行......
当
n=5
输出
11
7 12
4 8 13
2 5 9 14
1 3 6 10 15
解题思路
xy
40 = 1
30 = 2
41 = 3
20 = 4
31 = 5
42 = 6
10 = 7
21 = 8
32 = 9
43 = 10
00 = 11
11 = 12
22 = 13
33 = 14
44 = 15
*/
#include <stdio.h>
#include <stdlib.h>
#define Array parray /*使用动态数组 去掉这个定义则使用定长数组 */
#ifndef Array
#define N 5
#else
#define N n
int initarray(int ***array,int num); /*初始化数组 */
void delarray(int ***array); /*销毁数组*/
#endif
#define Error(x) switch((x)){ /
case 1: printf("Input to Big !"); break ;/
case 2: printf("Malloc() False! "); break;/
default: printf("ERROR !"); break; /
} /
printf(" Input Any Key to Exit !/n"); /
system("pause"); /
return x;
main(){
int x,y;
int forx ,fory;
int i = 0;
#ifndef Array
int Array[N][N] ={0};
#else
int n;
int **parray;
printf("Please Input N: ");
scanf("%d",&n);
if (n > 200){
Error(1);
}
if (!initarray(&Array,N)){
Error(2);
}
#endif
/* -------计算数值--------- */
for(x = N -1,y =0;x >= 0; --x,++y){
for(forx = x,fory =0 ; forx <= (N -1) ; ++forx, ++fory){
Array[forx][fory] = ++i;
}
}
/* -------- 打印数组 ----------*/
for(x= 0; x < N; ++x){
for(y = 0; y < N; ++y){
if (Array[x][y]) printf("%-2d ",Array[x][y]);
}
printf("/n");
}
#ifdef Array
delarray(&Array);
#endif
system("pause");
return 0;
}
#ifdef Array
int initarray(int ***array,int num){
int i,x;
*array = (int **)malloc(sizeof(int)*(num));
if (!*array ) return 0;
for (i = 0; i < num;++i){
(*array)[i] = (int *)malloc(sizeof(int)*(num));
if(!*array) return 0;
for(x= 0; x < num; ++x){
(*array)[i][x] = 0; /*初始化数组 */
}
}
return 1;
}/*initarray*/
void delarray(int ***array){
free(*array);
}/*delarray*/
#endif