//我的思路挺简单,循环判断部分有冗余的部分不知道怎么简化,求大佬指点 #include <stdio.h> int main() { int arr[1000][1000]; int n = 0; scanf("%d", &n); int i = 0, j = 0, count = 0, val = 1, flag = 1;//循环计数//起始数1//区别蛇形方向 while(count<2*n-1){ for(i=0; i<=count; i++) for(j=0; j<=count; j++) if(i+j==count && i<n && j<n)//不能超出数组的下标范围 if(flag==1) arr[j][i] = val++; else arr[i][j] = val++; count++;//循环计数加1 flag=-flag;//改变蛇形方向 } for(i=0; i<n; i++){ for(j=0; j<n; j++) printf("%d ", arr[i][j]); printf("\n"); } return 0; }