题目:跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
思路:根据数组下标来模拟蛇形填数的过程即可,注意y+1,y++,++y ,在数组下标里面的意义,
还有就是要用memset清空数组
#include<stdio.h>
#include<cstdlib>
#include<string.h>
#define Max 1000
using namespace std;
int arr[Max][Max];//存储的数组
int main(){
int t,n,x,y,count;
//t t组测试数据 n 三角形的边长 x,y 数组的下标 count 计数
scanf("%d",&t);
while(t--){
scanf("%d",&n);
x=0,y=0;
count=arr[x][y]=1;
while (count<(n+1)*n/2) {
//向左
while (y+1<n && arr[x][y+1]==0) {
arr[x][++y]=++count;
}
//对角
while (x+1<n && y-1>=0 && arr[x+1][y-1]==0) {
arr[++x][--y]=++count;
}
//向上
while (x-1>0 && arr[x-1][y]==0) {
arr[--x][y]=++count;
}
}
//输出
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (arr[i][j]!=0) {
printf("%d ",arr[i][j]);
}else{
break;
}
}
printf("\n");
}
memset(arr, 0, sizeof(arr));
}
}