找规律题,题解来喽
2024-06-10 15:30:34
发布于:上海
194阅读
0回复
0点赞
这是一道找规律题,难在如何从下往上,从右往左绕过来
看完题解,加入团队吧
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int s[n][n] = {};
int maxn=n-1,minn=0,left=0,right=n-1,m=n,c=0;
while(m>=1){
for(int i=0;i<(m-1)*4;i++){
if(i<m)s[minn][left+i]=c+1;//正常从左往右绕
else if(i<m*2-1)s[m-(m*2-i)+1+left][maxn]=c+1;//从上往下绕,注意它与层数相关,后边亦是如此
else if(i<m*3-2)s[maxn][left+m-(i-m*2+1)-2]=c+1;//从右往左绕,逆向思维,带入数据验证代码有没有问题
else s[m-(i-m*3+2+1)-1+left][minn]=c+1;//从下往上绕,逆向思维,带入数据验证代码有没有问题,最容易出错的地方要非常谨慎,否则功亏一篑了
c++;
}
maxn--;
minn++;
left++;
right--;
m-=2;
}
if(n%2)s[n/2][n/2]=n*n;
for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<s[i][j]<<" ";cout<<endl;}
}
全部评论 4
终于搞懂了啊
2024-01-13 来自 上海
2哇,看起来牛逼轰轰的样子~~~~~~~
#include<iostream> using namespace std; int n,A[102][102]={},a[4]={-1,0,1,0},b[4]={0,1,0,-1},sum=2,x=1,y=1; int main(){ cin>>n; A[1][1]=1; for(int i=1;sum<=n*n;i++){ while(A[x+a[i%4]][y+b[i%4]]==0&&x+a[i%4]<=n&&y+b[i%4]<=n&&x+a[i%4]>0&&y+b[i%4]>0){ x+=a[i%4]; y+=b[i%4]; A[x][y]=sum++; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout<<A[i][j]<<" "; }cout<<endl; } }
2024-07-23 来自 浙江
0if(i<m)s[minn][left+i]=c+1;
else if(i<m2-1)s[m-(m2-i)+1+left][maxn]=c+1;
else if(i<m3-2)s[maxn][left+m-(i-m2+1)-2]=c+1;
else s[m-(i-m*3+2+1)-1+left][minn]=c+1;2024-02-08 来自 上海
0代码不对啊,报错了
2024-02-05 来自 北京
0抱歉,打的时候和变成了斜体了,我发了一条评论,修改一下,应该可以过了,你去看一下
2024-02-08 来自 上海
0OK
2024-02-08 来自 北京
0
有帮助,赞一个