华师一附中OI组
标题:
蛇形填数
[打印本页]
作者:
admin
时间:
2018-7-23 10:01
标题:
蛇形填数
如图,输入n,输出n*n的蛇形方阵。
n=2
1 2
3 4
n=5
1 2 6 7 15
3 5 8 14
4 9 13
10 12
11
作者:
walk_alone
时间:
2018-7-23 19:02
本帖最后由 walk_alone 于 2018-7-23 19:21 编辑
第一个样例是不是应该没有4?而且这个也不是方阵啊!
作者:
张笑宇
时间:
2018-7-23 19:18
填了一半(如图2)
#include<iostream>
using namespace std;
int n;
const int mx=110;
int a[mx][mx],i,j,s=1;///s计数
int main()
{
cin>>n;
for (i=0; i<=n-1; i++) ///和
{
if (i%2==0)///向上
{
for (j=0; j<=i; j++)
{
a[j][i-j]=s;
s++;
}
}
else///向下
{
for (j=i; j>=0; j--)
{
a[j][i-j]=s;
s++;
}
}
}
for (i=0; i<=n-1; i++)
{
for (j=0; j<=n-1; j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
复制代码
作者:
walk_alone
时间:
2018-7-23 19:22
张笑宇 发表于 2018-7-23 19:18
填了一半(如图2)
是只用填一半啊,而且不能输出0
作者:
张笑宇
时间:
2018-7-23 19:45
#include<iostream>
#include<iomanip>
using namespace std;
int n;
const int mx=110;
int a[mx][mx],i,j,s=1;///s计数
int main()
{
cin>>n;
for (i=0; i<=n-1; i++) ///和
{
if (i%2==0)///向上
{
for (j=0; j<=i; j++)
{
a[j][i-j]=s;
s++;
}
}
else///向下
{
for (j=i; j>=0; j--)
{
a[j][i-j]=s;
s++;
}
}
}
s=n*n;
for (i=2*n-2; i>=n; i--)
{
if (i%2==0)///向下
{
for (j=n-1; j>=i+1-n; j--)
{
a[j][i-j]=s;
s--;
}
}
else///向上
{
for (j=i+1-n;j<=n-1;j++)
{
a[j][i-j]=s;
s--;
}
}
}
for (i=0; i<=n-1; i++)
{
for (j=0; j<=n-1; j++)
{
cout<<setw(2)<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
复制代码
作者:
walk_alone
时间:
2018-7-23 19:46
#include <cstdio>
int a[100][100],k=1,n;
int main()
{
scanf("%d",&n);
for(int i=0;i<=n-1;i++)
{
if(i%2==0)
for(int j=0;j<=i;j++)
{
a[j][i-j]=k;
k++;
}
else
for(int j=i;j>=0;j--)
{
a[j][i-j]=k;
k++;
}
}
for(int i=0;i<=n-1;i++)
{
for (int j=0;j<n-i;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
复制代码
作者:
张笑宇
时间:
2018-7-23 19:46
刚才只是暂时存一下,请见谅!!!
作者:
黄煦喆
时间:
2018-7-23 19:53
#include<iostream>
#include<iomanip>
using namespace std;
int n;
int a[101][101];
void pr()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
cout<<setw(3)<<a[i][j]<<' ';
cout<<endl;
}
}
void ms(int x,int y,int s)
{
a[x][y]=s;
if(x+y==n)ms(x+1,1,s+1);
else if(x==n)pr();
else ms(x,y+1,s+1);
}
int main()
{
cin>>n;n++;
ms(1,1,1);
return 0;
}
复制代码
作者:
七夜劫年
时间:
2018-7-24 08:34
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
int sum=1;
int a[1001][1001];
int main()
{
cin>>n;
for(int k=1;k<=n;k++)
{
if( k%2 == 0 )
{
for(int i=1;i<=k;i++)
{
int j=k-i+1;
a[i][j]=sum;
sum++;
}
}
else if( k%2 == 1 )
{
for(int i=k;i>=1;i--)
{
int j=k-i+1;
a[i][j]=sum;
sum++;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if( a[i][j] != 0 ) cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
作者:
Scorpio
时间:
2018-7-31 16:06
#include<iostream>
using namespace std;
int a[105000];
int n,i,j;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
{
if(i%2==1)
a[1]=a[1]+1;
else
a[1]=a[1]+((i-1)<<1);
for(j=2;j<=n-i+1;j++)
if(i%2==1)
if(j%2==1)
a[j]=a[j-1]+((j-1)<<1);
else
a[j]=a[j-1]+((i-1)<<1)+1;
else
if(j%2==1)
a[j]=a[j-1]+((i-1)<<1)+1;
else
a[j]=a[j-1]+((j-1)<<1);
for(j=1;j<=n-i+1;j++)
cout<<a[j]<<" ";
cout<<endl;
}
return 0;
}
复制代码
作者:
Scorpio
时间:
2018-7-31 16:08
有没有发现我的代码是蛇形的(S)
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2