首页 > 其他分享 >对未来的自己的一个提醒。关于打表答题的思路,洛谷P5731

对未来的自己的一个提醒。关于打表答题的思路,洛谷P5731

时间:2023-04-03 17:46:16浏览次数:58  
标签:洛谷 P5731 int 打表 include 规律

P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题就是纯纯找规律的模拟题,但是在比赛或者思维比较松散的情况下紧张的时候会想不出模拟思路

这时候如果测试数据的范围比较小,如本题的数据最大就到九阶方阵,所以可以手算出每一种类型打表输出,不用去考虑一般规律

当然数据范围比较大的时候还是得怪怪找规律-_-&

这里贴上我的找出规律的代码以及题解中的打表代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 int Num[10][10];
 5 int n;
 6 int NotBeyound(int H, int L)//判断是否出界,否返回1
 7 {
 8     if ((H >= 1 && H <= n) && (L >= 1) && (L <= n))
 9         return 1;
10     else
11         return 0;
12 }
13 int main()
14 {
15     scanf("%d", &n);
16     int H = 1, L = 1;
17     int Flag = 2;//状态标记,1左2右3上4下,初始向右
18     Num[1][1] = 1;
19     int N = 2;
20     while (N <= n*n)
21     {
22         if (Flag == 2)//初始向右
23         {
24             if (Num[H][L + 1] == 0 && NotBeyound(H, L+1))
25                 Num[H][++L] = N++;
26             else
27                 Flag = 4;
28         }
29         if (Flag == 4)
30         {
31             if (Num[H + 1][L] == 0 && NotBeyound(H + 1, L))
32                 Num[++H][L] = N++;
33             else
34                 Flag = 1;
35         }
36         if (Flag == 1)
37         {
38             if (Num[H][L - 1] == 0 && NotBeyound(H, L - 1))
39                 Num[H][--L] = N++;
40             else
41                 Flag = 3;
42         }
43         if (Flag == 3)
44         {
45             if (Num[H - 1][L] == 0 && NotBeyound(H - 1, L))
46                 Num[--H][L] = N++;
47             else
48                 Flag = 2;
49         }
50     }
51     for (int i = 1; i <= n; i++)
52     {
53         for (int j = 1; j <= n; j++)
54         {
55             printf("%3d", Num[i][j]);
56         }
57         printf("\n");
58     }
59     return 0;
60 }

打表代码如下

#include <bits/stdc++.h>
using namespace std;
int n;
int main () {
    cin >> n;
    if(n == 1)
        cout << "  1\n";
    if(n == 2)
        cout <<"  1  2\n  4  3\n";
    if(n == 3) {
        cout << "  1  2  3\n";
        cout << "  8  9  4\n";
        cout << "  7  6  5\n";
    }
    if(n == 4) {
        cout << "  1  2  3  4\n";
        cout << " 12 13 14  5\n";
        cout << " 11 15 16  6\n";
        cout << " 10  9  8  7\n";
    }
    if(n == 5) {
        cout << "  1  2  3  4  5\n";
        cout << " 16 17 18 19  6\n";
        cout << " 15 24 25 20  7\n";
        cout << " 14 23 22 21  8\n";
        cout << " 13 12 11 10  9\n";
    }
    if(n == 6) {
        cout << "  1  2  3  4  5  6\n";
        cout << " 20 21 22 23 24  7\n";
        cout << " 19 32 33 34 25  8\n" ;
        cout << " 18 31 36 35 26  9\n";
        cout << " 17 30 29 28 27 10\n";
        cout << " 16 15 14 13 12 11\n";
    }
    if(n == 7) {
        cout << "  1  2  3  4  5  6  7\n";
        cout << " 24 25 26 27 28 29  8\n";
        cout << " 23 40 41 42 43 30  9\n";
        cout << " 22 39 48 49 44 31 10\n";
        cout << " 21 38 47 46 45 32 11\n";
        cout << " 20 37 36 35 34 33 12\n";
        cout << " 19 18 17 16 15 14 13\n";
    }
    if(n == 8) {
        cout << "  1  2  3  4  5  6  7  8\n";
        cout << " 28 29 30 31 32 33 34  9\n";
        cout << " 27 48 49 50 51 52 35 10\n";
        cout << " 26 47 60 61 62 53 36 11\n";
        cout << " 25 46 59 64 63 54 37 12\n";
        cout << " 24 45 58 57 56 55 38 13\n";
        cout << " 23 44 43 42 41 40 39 14\n";
        cout << " 22 21 20 19 18 17 16 15\n";
    }
    if(n == 9) {
        cout << "  1  2  3  4  5  6  7  8  9\n";
        cout << " 32 33 34 35 36 37 38 39 10\n";
        cout << " 31 56 57 58 59 60 61 40 11\n";
        cout << " 30 55 72 73 74 75 62 41 12\n";
        cout << " 29 54 71 80 81 76 63 42 13\n";
        cout << " 28 53 70 79 78 77 64 43 14\n";
        cout << " 27 52 69 68 67 66 65 44 15\n";
        cout << " 26 51 50 49 48 47 46 45 16\n";
        cout << " 25 24 23 22 21 20 19 18 17\n";
    }
    return 0;
}

 

标签:洛谷,P5731,int,打表,include,规律
From: https://www.cnblogs.com/WKWKSL/p/17283785.html

相关文章

  • 洛谷 P2398. GCD SUM
    题目描述求$$\sum\limits_{i=1}^n\sum\limits_{j=1}^n\gcd(i,j)$$输入:2输出:5算法1 线性筛 $O(n)$将式子变形:要知道一个前置定理$\sum\limits_{d|n}\varphi(d)=n$艾弗森约定:定义$\\\[P]$=$$\begin{cases}P\text{}is\text{}tr......
  • 洛谷 P8918 『MdOI R5』Jump 题解
    题目传送门这一题其实很简单,只是要想到正确方法我一开始用了奇怪的搜索①无解的情况:看上去很离奇,实际上略加思索就会发现,如果输入\(n\)为偶数,那么就铁定无解。证明过程如下:令\(n\bmod{2}=0\),人距离\(n\)点的距离为\(dis\),则当走出第一步(步长为\(1\))时,有:\[dis=\midn......
  • 洛谷 P8742 [蓝桥杯 2021 省 AB] 砝码称重
    经典01背包题首先介绍一下01背包,即一种DP问题,以放置物品为模型,每个物品只能放一次。其区分于完全背包(每个物品可以放无限多次),以及多重背包(每个物品有一个固定次数上限)。题中给出了$N$个砝码及每个砝码的质量,要求我们求出可以称出质量的种数。由此想到转化为01背包。......
  • 洛谷 P9009 [入门赛 #9] 牵连的世界 (Hard Version) 题解
    P9009[入门赛#9],真9。这是一道hack题,即你需要自造符合题意的数据使题中所给程序无法AC。Task01看数据范围知一切,显然有\(-2\times10^9\lea_i\le2\times10^9\),因此\(a_i\)可能为负数。注意C/C++中的取模%(mod)运算实质上是为取余运算(rem)对于整型数a,b来说......
  • 洛谷 P8762 [蓝桥杯 2021 国 ABC] 123 题解
    为什么可以使用前缀和,这里提供解释:初读题目,我们发现这个数列很迷惑,似乎不能使用数学方法来解。\[1,1,2,1,2,3,1,2,3,4,\cdots\]但是,我们可以想到数形结合的方式,我们将数列看作一个三角形,于是他变成了:\[1\]\[1,2\]\[1,2,3\]\[1,2,3,4\]\[\cdots\cdots\]于是本题变得好思......
  • 洛谷P1217 [USACO1.5]回文质数 Prime Palindromes
    #include<bits/stdc++.h>usingnamespacestd;inta,b;boolzs(intx){if(x%2>0){for(inti=3;i<x;i+=2)if(x%i==0)returnfalse;returntrue;}elsereturnfalse;}boolhws(intx......
  • 笔记:洛谷 P3985 不开心的金明
    算法笔记:[背包问题]洛谷P3985不开心的金明题目详情原题链接:洛谷P3985不开心的金明不开心的金明Description  金明今天很不开心,家里购置的二手房就要领钥匙了,房里并没有一间他自己专用的很宽敞的房间。更让他不高兴的是,妈妈昨天对他说:“你需要购买哪些物品,怎么布置,你......
  • prim算法(洛谷P1547)
    P1547[USACO05MAR]OutofHayS模板/*B1682[Usaco2005Mar]OutofHay干草危机洛谷P1547[USACO05MAR]OutofHayS====关键词===================================================prim算法(最小生成树)1.WA,没有加重复边的判断2.加了重复边的判断,还是WA,但分数高了一点3......
  • 洛谷P1908 逆序对
    题目描述猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai​>aj​且 i<j 的有序对。......
  • 洛谷P3374 【模板】树状数组 1-(单点修改,区间查询)
    题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上 x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 ......