蓝桥杯2020之蛇形填数两种解法

目录

前言

一、看题!

二、两种解法

1.不正经解法

2.正经解法

总结


前言

蓝桥杯2023备赛之蛇形填数,官网上刷到的

下面我会讲解不正经解法正经解法,当然肯定是不正经的快啦


一、看题!

如下图所示,小明用从 1 开始的正整数填充无限大的蛇皮矩阵

1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...

容易看出矩阵第 2 行第 2 列中的数是 55。请你计算矩阵中第 20 行第 20 列的数是多少?

难度: 简单   标签: 填空题, 2020, 省赛

二、两种解法

1.不正经解法

1    2    6    7     15   16    28    29    45

3    5    8    14    17    27   30   44

4    9    13   18    26   31   43

10   12   19   25   32   42

11   20   24   33   41  

21   23   34   40

22   35   39

36   38

37

就这样,我在草稿纸上“画”出了9条斜杠,草稿纸上是标准的等腰三角形(比这里标准)

求第20行20列的数字,就先找第1行第1列,第2行第2列。。。规律

第1行: 1

第2行: 5

第3行:13

第4行:25

第5行:41

5 - 1 = 4,13 - 5 = 8, 25 - 13 = 12, 41 - 25 = 16

容易发现,第三和第二个数字的差值 = 第二和第一个数字的差值 + 4

以此类推可求出第20个数字

所以看不正经代码:

#include<iostream>
using namespace std;

int main()
{
    int sum = 1;
    int c = 4;
    for(int i = 2; i <= 20; i++)
    {
        sum += c;
        c += 4;
    }
    cout<<sum<<endl;

    return 0;
}

输出是761 

测试前5项正确后,提交后Accepted(总共用了10分钟

2.正经解法

看代码

#include<iostream>
using namespace std;

int main()
{
    int a[520][66];//往大点声明, 不超限就行
    a[0][0] = 0;
    int row = 0, col = 0, n = 1;//row行,column列,n表示数字
    while(!a[19][19])
    {
        //往右
        a[row][++col] = ++n;
        //往左下
        while(col)//当列不为0,一直往左下移动
            a[++row][--col] = ++n;
        //往下
        a[++row][col] = ++n;
        //往右上
        while(row)//当行不为0,一直往右上移动
            a[--row][++col] = ++n;
    }
    cout<<a[19][19]<<endl;

    return 0;
}

1,while(!a[19][19])表示当移动到第20行第20列时停止

2,都要先移动和自增,所以都是前缀+-

3,while(col),表示当列为0,停止往左下移动,此时已移动到最左边那一列

4,while(row),表示当行为0,停止往右上移动,此时已移动到最上面那一行

5,也可以在正经解法后加入这一段:

for(int i = 0; i < 20; i++)
    {
        for(int j = 0; j < 20; j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }

看看效果:

761
0 2 6 7 15 16 28 29 45 46 66 67 91 92 120 121 153 154 190 191
3 5 8 14 17 27 30 44 47 65 68 90 93 119 122 152 155 189 192 230
4 9 13 18 26 31 43 48 64 69 89 94 118 123 151 156 188 193 229 234
10 12 19 25 32 42 49 63 70 88 95 117 124 150 157 187 194 228 235 273
11 20 24 33 41 50 62 71 87 96 116 125 149 158 186 195 227 236 272 281
21 23 34 40 51 61 72 86 97 115 126 148 159 185 196 226 237 271 282 320
22 35 39 52 60 73 85 98 114 127 147 160 184 197 225 238 270 283 319 332
36 38 53 59 74 84 99 113 128 146 161 183 198 224 239 269 284 318 333 371
37 54 58 75 83 100 112 129 145 162 182 199 223 240 268 285 317 334 370 387
55 57 76 82 101 111 130 144 163 181 200 222 241 267 286 316 335 369 388 426
56 77 81 102 110 131 143 164 180 201 221 242 266 287 315 336 368 389 425 446
78 80 103 109 132 142 165 179 202 220 243 265 288 314 337 367 390 424 447 485
79 104 108 133 141 166 178 203 219 244 264 289 313 338 366 391 423 448 484 509
105 107 134 140 167 177 204 218 245 263 290 312 339 365 392 422 449 483 510 548
106 135 139 168 176 205 217 246 262 291 311 340 364 393 421 450 482 511 547 576
136 138 169 175 206 216 247 261 292 310 341 363 394 420 451 481 512 546 577 615
137 170 174 207 215 248 260 293 309 342 362 395 419 452 480 513 545 578 614 647
171 173 208 214 249 259 294 308 343 361 396 418 453 479 514 544 579 613 648 686
172 209 213 250 258 295 307 344 360 397 417 454 478 515 543 580 612 649 685 722
210 212 251 257 296 306 345 359 398 416 455 477 516 542 581 611 650 684 723 761

Process returned 0 (0x0)   execution time : 0.290 s
Press any key to continue.


花了我半小时,所以还是投机取巧快,当然佬5分钟解出来没话说

总结

蛇皮矩阵很皮,所以你也要皮一点,用更快的速度解出题目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千帐灯无此声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值