13杭电warmup1 1001 Children's Day

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4706

用一个三维数组来存贮要表示的矩阵,先画几个特例找规律,记住这个N是倒的...

代码:

#include<iostream>
#include<cstdio>
using namespace std;

char p[11][11][11];


int main()
{
   for(int i=1;i<11;i++)
     for(int j=1;j<11;j++)
       for(int k=1;k<11;k++)
         p[i][j][k]=' ';

   int cnt=0;
   for(int i=3;i<=10;i++)
   {
      for(int j=1;j<=3*i-2;j++)
       {

         if(j<=i)
         {
            p[i][j][1]=char('a'+cnt%26);
         }
         else if(j<=2*i-2)
         {
             p[i][2*i-j][j-i+1]=char('a'+cnt%26);
         }
         else
         {
             p[i][j-2*i+2][i]=char('a'+cnt%26);
         }

         cnt++;
       }
   }

   for(int i=3;i<=10;i++)
   {
      for(int j=1;j<=i;j++)
      {
        for(int k=1;k<=i;k++)
          cout<<p[i][j][k];
          cout<<endl;
      }
   }
}

小白书上有一题蛇形数组输出,顺便写了一下

代码:

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;


int  a[100][100];
bool vis[100][100];


void init()
{
    memset(vis,0,sizeof(vis));

}


int main()
{
   int n;
   while(cin>>n)
   {
       init();
        int i,j;
        i=0;j=0;
        int way=0;
        int count=0;
        while(count<n*n)
        {
            if(!vis[i][j]&&i<n&&j<n)
            {
               a[i][j]=count+1;
             //  cout<<i<<' '<<j<<endl;
               vis[i][j]=1;
               count++;
            }
            else

               if(way==0)
               {
                   if(j+1<n&&!vis[i][j+1])
                   j++;
                   else  way=(way+1)%4;
               }
               else if(way==1)
               {
                   if(i+1<n&&!vis[i+1][j])
                   i++;
                   else way=(way+1)%4;
               }
               else if(way==2)
               {
                    if(j-1>=0&&!vis[i][j-1])
                    j--;
                    else way=(way+1)%4;;
               }
               else
               {
                     if(i-1>=0&&!vis[i-1][j])
                     i--;
                     else way=(way+1)%4;
               }


        }

        for(int i=0;i<n;i++)
         {
            for(int j=0;j<n;j++)
             cout<<a[i][j]<<' ';

             cout<<endl;
         }
   }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值