?#include <stdio.h> #define N 5 int main() { ?? ?int i,j,k=1; ?? ?int q[N][N]={0}; ?? ?for(i=0;i<N;i++){ //上半边? ?? ??? ?if(i%2==1) //讨论向上还是向下? ?? ??? ?for(j=i;j>=0;j--){ //向下递增 ? ?? ??? ??? ?q[i-j][j]=k;? ?? ??? ??? ?k++; ?? ??? ?} ?? ??? ?else? ?? ??? ?for(j=i;j>=0;j--){ //向上递增? ?? ??? ??? ?q[j][i-j]=k;? ?? ??? ??? ?k++; ?? ??? ?} ?? ?}? ?? ?if(N%2) //判断? ?? ?{ ?? ?for(i=1;i<N;i++){ //奇数下半边 ,正常赋值? ?? ??? ?if(i%2==1) ?? ??? ?for(j=N;j>i;j--){ ?? ??? ? ? ?q[i+N-j][j-1]=k; ?? ??? ? ? ?k++; ?? ??? ?} ?? ??? ?else? ?? ??? ?for(j=i;j<N;j++){ ?? ??? ??? ?q[N+i-j-1][j]=k; ?? ??? ??? ?k++;?? ? ?? ??? ?} ?? ?} ?? ?} ?? ?else{ ? //偶数下半边 ,改变赋值方法? ?? ??? ?int k1=N*N;?? ??? ?// 从右下顶点开始赋值? ?? ??? ?for(i=N-1;i>0;i--){? ?? ??? ??? ?if(i%2==1) ?? ??? ??? ?for(j=N;j>i;j--){ ?? ??? ??? ? ? ?q[i+N-j][j-1]=k1; ?? ??? ??? ? ? ?k1--; ?? ??? ??? ?} ?? ??? ??? ?else? ?? ??? ??? ?for(j=i;j<N;j++){ ?? ??? ??? ??? ?q[N+i-j-1][j]=k1; ?? ??? ??? ??? ?k1--;?? ? ?? ??? ??? ?} ?? ??? ?} ?? ?} ? ? for(i=0;i<N;i++){ //输出? ?? ??? ?for(j=0;j<N;j++){ ?? ??? ??? ?printf("%4d",q[i][j]); ?? ??? ?} ?? ??? ?putchar(10); ?? ??? ?putchar(10); ?? ?} ?? ?return 0; }
N为5(奇)时:
N为6(偶)时:
|