蛇形填数1
在n*n方阵里填入1,2,3,…,n*n,要求填成蛇形。
例如n=4时方阵为:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[105][105];
int main(){
int n;
cin>>n;
int i=-1,j=n-1,num=0;
while(num<n*n)
{
while(i<n-1&&!a[i+1][j])//下方
a[++i][j]=++num;
while(j>0&&!a[i][j-1])//左方
a[i][--j]=++num;
while(i>0&&!a[i-1][j])//上方
a[--i][j]=++num;
while(j<n-1&&!a[i][j+1])//右方
a[i][++j]=++num;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%3d ",a[i][j]);
printf("\n");
}
return 0;
}
蛇形填数2
描述
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
输入
第一行有一个N,表示N组测试数据
接下来每组数据包括一个数字X,表示三角形的边长,0< X <1000
输出
输出之后填好之后的图
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e3+10;
int a[M][M];
int main(){
int N,x;
scanf("%d",&N);
while(N--)
{
memset(a,0,sizeof(a));
scanf("%d",&x);
int i=0,j=-1,cnt=(1+x)*x/2,num=0;
while(num<cnt)
{
while(j<x-1&&!a[i][j+1])//右方
a[i][++j]=++num;
while(i<x-1&&j>0&&!a[i+1][j-1])//左下方
a[++i][--j]=++num;
while(i>0&&!a[i-1][j])//上方
a[--i][j]=++num;
}
for(int i=0;i<x;i++)
{
for(int j=0;j<x-i;j++)
{
printf("%3d ",a[i][j]);
}
printf("\n");
}
}
return 0;
}
蛇形填数3
输入
第一行有一个N,表示方阵的大小
i,j分别表示第i行,第j列
输出
(1)输入N,则输出填好之后的图
(2)输入i,j,则输出图形中相应位置的数值
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e3+10;
int a[M][M];
int Sum(int n)
{
return (1+n)*n/2;
}
int main(){
int N;
while(~scanf("%d",&N))
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
int num=(i-1)*i/2+1;
int bj=N-i+1;
if(j>=bj)num+=Sum(N)-Sum(i);
else num+=Sum(j+i-1)-Sum(i);
if(j>bj)
{
int bj2=j-bj;
num+=Sum(N)-Sum(N-bj2);
}
a[i][j]=num;
printf("%2d ",num);
}
printf("\n");
}
int i,j;
scanf("%d%d",&i,&j);
printf("%d\n",a[i][j]);
}
return 0;
}
蛇形填数3参考了博主m0_51990674的博客_skywalker767_CSDN博客的解题方法与视频讲解,QQ小程序