C语言一菜鸟级


私信TA

用户名:LHL

访问量:66208

签 名:

AC总是意料之外 ^_^

等  级
排  名 53
经  验 11530
参赛次数 5
文章发表 56
年  龄 24
在职情况 在职
学  校 四川工商学院
专  业 通信工程

  自我简介:

C语言 蓝桥杯 ACM 新人 欢迎大佬 前来指导 交流 本人 博客https://fivecc.blog.csdn.net/

解题思路:

        感觉有点 dfs的感觉 不装南墙不变方向 这里南墙指的 方阵的边界或前进方向的格子里面有数填进去了。

正题, 就是在执行下一步之前先预判一下当前你想到的下一个格子是否在方阵范围内是否有数已经填进去了。 只有 在方阵内 并且 格子里面没有被填过 则可以移动到格子里填数。下面是代码 不多 可以阅读下 理理思路。


注意事项:

参考代码:

#include<stdio.h>
int main()
{
    int n;
    while(~scanf("%d",&n)){
        int x=0,y=n-1,num=1;int a[100][100]={0};
        a[x][y]=num++;//初始坐标
        while(n*n>=num)//结束条件
        {
            while(x+1<n&&!a[x+1][y])a[++x][y]=num++;//向下
            while(y-1>=0&&!a[x][y-1])a[x][--y]=num++;//向左
            while(x-1>=0&&!a[x-1][y])a[--x][y]=num++;//向上
            while(y+1<n&&!a[x][y+1])a[x][++y]=num++;//向右
        }
        for(x=0;x<n;x++)
        {
            for (y=0;y<n;y++)
           if(y==n-1) printf("%d",a[x][y]);//注意题目要求 末尾没空格
           else  printf("%d ",a[x][y]);
            printf("\n");
        }
         printf("\n");//注意题目要求 每个方阵空行
    }
    return 0;
}


 

0.0分

10 人评分

  评论区

#include<bits/stdc++.h> 
using namespace std;
int ans=1,gg,k=1,n,x=0,y=0,a[999][999];



int main(){
	cin>>n;
	gg=k=n;
	y=n-1;
	a[x][y]=1;
    
	
	      k--;
     	 for(int i=k;i>0;i--){
      	a[++x][y]=++ans;
      }  
      for(int i=k;i>0;i--){
      	a[x][--y]=++ans;
      }
	for(int i=k;i>0;i--){
      	a[--x][y]=++ans;
      }
	  k--;
	  for(int i=k;i>0;i--){
      	a[x][++y]=++ans;
      }
       for(int i=k;i>0;i--){
      	a[++x][y]=++ans;
      }
      while(gg>=5){
      k--;
	   for(int i=k;i>0;i--){
      	a[x][--y]=++ans;
      }
      for(int i=k;i>0;i--){
      	a[--x][y]=++an
2021-04-13 16:47:16
感谢大佬,解决了我空格问题
2020-02-03 12:44:48
  • «
  • 1
  • »