华师一附中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)
  1. #include<iostream>
  2. using namespace std;
  3. int n;
  4. const int mx=110;
  5. int a[mx][mx],i,j,s=1;///s计数
  6. int main()
  7. {
  8.     cin>>n;
  9.     for (i=0; i<=n-1; i++) ///和
  10.     {
  11.         if (i%2==0)///向上
  12.         {
  13.             for (j=0; j<=i; j++)
  14.             {
  15.                 a[j][i-j]=s;
  16.                 s++;
  17.             }
  18.         }
  19.         else///向下
  20.         {
  21.             for (j=i; j>=0; j--)
  22.             {
  23.                 a[j][i-j]=s;
  24.                 s++;
  25.             }
  26.         }
  27.     }
  28.     for (i=0; i<=n-1; i++)
  29.     {
  30.         for (j=0; j<=n-1; j++)
  31.         {
  32.             cout<<a[i][j]<<" ";
  33.         }
  34.         cout<<endl;
  35.     }

  36.     return 0;
  37. }
复制代码

作者: walk_alone    时间: 2018-7-23 19:22
张笑宇 发表于 2018-7-23 19:18
填了一半(如图2)

是只用填一半啊,而且不能输出0
作者: 张笑宇    时间: 2018-7-23 19:45
  1. #include<iostream>
  2. #include<iomanip>
  3. using namespace std;
  4. int n;
  5. const int mx=110;
  6. int a[mx][mx],i,j,s=1;///s计数
  7. int main()
  8. {
  9.     cin>>n;
  10.     for (i=0; i<=n-1; i++) ///和
  11.     {
  12.         if (i%2==0)///向上
  13.         {
  14.             for (j=0; j<=i; j++)
  15.             {
  16.                 a[j][i-j]=s;
  17.                 s++;
  18.             }
  19.         }
  20.         else///向下
  21.         {
  22.             for (j=i; j>=0; j--)
  23.             {
  24.                 a[j][i-j]=s;
  25.                 s++;
  26.             }
  27.         }
  28.     }
  29.     s=n*n;
  30.     for (i=2*n-2; i>=n; i--)
  31.     {
  32.         if (i%2==0)///向下
  33.         {
  34.             for (j=n-1; j>=i+1-n; j--)
  35.             {
  36.                 a[j][i-j]=s;
  37.                 s--;
  38.             }
  39.         }
  40.         else///向上
  41.         {
  42.             for (j=i+1-n;j<=n-1;j++)
  43.             {
  44.                 a[j][i-j]=s;
  45.                 s--;
  46.             }
  47.         }
  48.     }
  49.     for (i=0; i<=n-1; i++)
  50.     {
  51.         for (j=0; j<=n-1; j++)
  52.         {
  53.             cout<<setw(2)<<a[i][j]<<" ";
  54.         }
  55.         cout<<endl;
  56.     }
  57.     return 0;
  58. }
复制代码

作者: walk_alone    时间: 2018-7-23 19:46
  1. #include <cstdio>
  2. int a[100][100],k=1,n;
  3. int main()
  4. {
  5.     scanf("%d",&n);
  6.         for(int i=0;i<=n-1;i++)
  7.     {
  8.         if(i%2==0)
  9.             for(int j=0;j<=i;j++)
  10.             {
  11.                 a[j][i-j]=k;
  12.                 k++;
  13.             }
  14.         else
  15.             for(int j=i;j>=0;j--)
  16.             {
  17.                 a[j][i-j]=k;
  18.                 k++;
  19.             }
  20.     }
  21.     for(int i=0;i<=n-1;i++)
  22.     {
  23.         for (int j=0;j<n-i;j++)
  24.                         printf("%d ",a[i][j]);
  25.         printf("\n");
  26.     }
  27.     return 0;
  28. }
复制代码

作者: 张笑宇    时间: 2018-7-23 19:46
刚才只是暂时存一下,请见谅!!!
作者: 黄煦喆    时间: 2018-7-23 19:53
  1. #include<iostream>
  2. #include<iomanip>
  3. using namespace std;
  4. int n;
  5. int a[101][101];
  6. void pr()
  7. {
  8.     for(int i=1;i<=n;i++)
  9.     {
  10.         for(int j=1;j<=n-i;j++)
  11.         cout<<setw(3)<<a[i][j]<<' ';
  12.         cout<<endl;
  13.     }
  14. }
  15. void ms(int x,int y,int s)
  16. {
  17.     a[x][y]=s;
  18.     if(x+y==n)ms(x+1,1,s+1);
  19.     else if(x==n)pr();
  20.     else ms(x,y+1,s+1);
  21. }
  22. int main()
  23. {
  24.     cin>>n;n++;
  25.     ms(1,1,1);
  26.     return 0;
  27. }
复制代码

作者: 七夜劫年    时间: 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
  1. #include<iostream>
  2. using namespace std;
  3. int a[105000];
  4. int n,i,j;
  5. int main()
  6. {
  7.     cin>>n;
  8.     for(i=1;i<=n;i++)
  9.     {
  10.         if(i%2==1)
  11.             a[1]=a[1]+1;
  12.         else
  13.             a[1]=a[1]+((i-1)<<1);
  14.         for(j=2;j<=n-i+1;j++)
  15.             if(i%2==1)
  16.                 if(j%2==1)
  17.                     a[j]=a[j-1]+((j-1)<<1);
  18.                 else
  19.                     a[j]=a[j-1]+((i-1)<<1)+1;
  20.             else
  21.                 if(j%2==1)
  22.                     a[j]=a[j-1]+((i-1)<<1)+1;
  23.                 else
  24.                     a[j]=a[j-1]+((j-1)<<1);
  25.         for(j=1;j<=n-i+1;j++)
  26.             cout<<a[j]<<" ";
  27.         cout<<endl;
  28.     }
  29.     return 0;
  30. }
复制代码

作者: Scorpio    时间: 2018-7-31 16:08
有没有发现我的代码是蛇形的(S)




欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2