ACM(递归递推—O)
2017-03-31 20:57
225 查看
题目:输入一个n输出一个n*n的螺旋方阵
解题思路:先定义一个数组,然后将数组赋值为0,用4个while循环来为数组赋值,定义一个add=1,然后元素通过++add为每个数组便利,当add==n*n时说明已经便利完成,否则继续赋值。
细节处理:利用while循环输入,然后通过数组是否为0,判断是否已经赋值了。
代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
int d;
cin>>d;
while(d--)
{
int add=1,i=0,j=0,n,a[12][12]={1};
cin>>n;
while(add<n*n)
{
while(j+1<n&&a[i][j+1]==0)
a[i][++j]=++add;
while(i+1<n&&a[i+1][j]==0)
a[++i][j]=++add;
while(j-1>=0&&a[i][j-1]==0)
a[i][--j]=++add;
while(i-1>=0&&a[i-1][j]==0)
a[--i][j]=++add;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{cout<<a[i][j];
if(j==n-1)
cout<<endl;
else
cout<<'\t';
}}
cout<<endl;}
return 0;
}
感想:通过将数组初始化为0,然后判断元素是否为0来判断是否已赋值,这样会更加节省时间。
解题思路:先定义一个数组,然后将数组赋值为0,用4个while循环来为数组赋值,定义一个add=1,然后元素通过++add为每个数组便利,当add==n*n时说明已经便利完成,否则继续赋值。
细节处理:利用while循环输入,然后通过数组是否为0,判断是否已经赋值了。
代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
int d;
cin>>d;
while(d--)
{
int add=1,i=0,j=0,n,a[12][12]={1};
cin>>n;
while(add<n*n)
{
while(j+1<n&&a[i][j+1]==0)
a[i][++j]=++add;
while(i+1<n&&a[i+1][j]==0)
a[++i][j]=++add;
while(j-1>=0&&a[i][j-1]==0)
a[i][--j]=++add;
while(i-1>=0&&a[i-1][j]==0)
a[--i][j]=++add;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{cout<<a[i][j];
if(j==n-1)
cout<<endl;
else
cout<<'\t';
}}
cout<<endl;}
return 0;
}
感想:通过将数组初始化为0,然后判断元素是否为0来判断是否已赋值,这样会更加节省时间。
相关文章推荐
- ACM递推递归练习总结
- ACM递推递归练习C递归的函数
- ACM(递归递推—B)
- ACM(递归递推—F)
- ACM递推递归练习 M - 数值分解
- ACM-递推递归练习A-母牛的故事
- ACM-递归递推练习K- 们--加强斐波那契
- ACM(递归递推—G)
- ACM(递归递推—J)
- ACM 算法竞赛 八大基础算法 模拟法 字符串 递归分治 排序 枚举 贪心 递推
- ACm递归递推练习 Problem E
- ACM-递归递推练习F-计算组合数
- ACM-递归递推练习H-三国佚事——巴蜀之危
- ACM-递归递推练习L - 马拦过河卒
- ACM-递归递推练习O-螺旋方阵
- ACM递推递归练习E养兔子
- ACM(递归递推—H)
- ACM-递归递推练习G-Fighting_小银考呀考不过四级
- ACM递推递归练习F计算组合数
- ACM(递归递推—I)