第十一届蓝桥杯 2020 C/C++组 蛇形填数

目录

题目:

题目描述:

题目链接:

思路:

思路详解:

代码:

代码详解:


题目:

题目描述:

题目链接:

蛇形填数 - 蓝桥云课

思路:

思路详解:

看图找规律,容易发现,数字按照:向右一步->向左下直到边界->向下一步->向右上直到边界。用二维数组表示点的坐标,用i表示第i行,用j表示第j列。走一步的直接写即可(i++表示向下一步,j++表示向右一步),走到边界的用while加上判断边界的条件即可

注意判断边界还存在规律,草稿纸找到的规律:找第n行n列,i,j需要遍历到2*n-1,找a[20][20]即找第20行20列,i,j需要遍历到39,如果i,j设的数<39输出结果为0,草稿纸如下图所示:

代码:

代码详解:

复制代码
#include<bits/stdc++.h>  //填空题,答案是761 
using namespace std;     //容易发现,数字按照:向右一步->向左下直到边界->向下一步->向右上直到边界 
                         //走一步的直接写即可,走到边界的用while加上判断边界的条件即可 
int a[1000][1000];       //多开一点,防止数组越界 

int main()
{
	a[1][1]=1;
	int temp=1;
	for(int i=1,j=1;i<=40&&j<=40;) //由草稿纸找到的规律:找第n行n列,i,j需要遍历到2*n-1,找a[20][20] 
	{                              //即找第20行20列,i,j需要遍历到39,如果i,j设的数<39输出结果为0 
		j++;          //表示向右一步 
		temp++;
		a[i][j]=temp;
		
		while(j!=1)   //向左下直到边界,边界的条件就是走到第一列,即j==1 
		{
			i++;
			j--;
			temp++;
			a[i][j]=temp;
		}
		
		i++;          //表示向下一步 
		temp++;
		a[i][j]=temp;
		
		while(i!=1)   //向右上直到边界,边界的条件就是走到第一行,即i==1 
		{
			i--;
			j++;
			temp++;
			a[i][j]=temp;
		}
	}
	cout<<a[20][20]<<endl;
	return 0;
}
相关推荐
Ronin30512 分钟前
【C++】16.继承
开发语言·c++
qq_4335545412 分钟前
C++ string初始化、string赋值操作、string拼接操作
开发语言·c++·算法
CodeWithMe40 分钟前
【C/C++】跟我一起学_C++同步机制效率对比与优化策略
c语言·c++
终焉代码41 分钟前
C++入门篇——类和对象(下)
开发语言·c++·算法
嗨信奥1 小时前
蓝桥杯青少 图形化编程(Scratch)编程题每日一练——小猫的城堡
青少年编程·蓝桥杯
愚润求学1 小时前
【动态规划】斐波那契数列模型
c++·笔记·算法·leetcode·动态规划
程序猿(雷霆之王)1 小时前
贪心算法专题(Part1)
c++·算法·贪心算法
Susea&1 小时前
趣味编程:四叶草
c语言·开发语言·c++·技术美术
虾球xz1 小时前
游戏引擎学习第273天:动画预览
c++·学习·游戏引擎
xueyinan2 小时前
小刚说C语言刷题—1058 - 求出100至999范围内的所有水仙花数
c语言