• 首页
  • 教育理念
  • 文章专题
  • 编程教程
    • – Scratch编程教程
    • – AppInventor编程
    • – Python编程教程
    • – NOIP信息学奥赛
    • – C/C++编程教程
    • – JS编程教程
  • 少儿编程学院
    • – 在线课程
    • – 学院名师
    • – 动态资讯
  • 少儿编程社区
    • – 在线编程
    • – 编程作品
    • – 专题创作
  • 更多
    • – APP客户端
    • – 关于我们
    • – 寻求合作
    • – 少儿编程联盟
投稿 登录 注册
  • 首页
  • 文章专题
  • 教育理念
  • 编程教程
  • 少儿编程学院
  • 微信公众号
  • APP客户端
少儿编程学院
少儿编程教育-微信公众号
首页 › 编程教程 › NOIP信息学奥赛 › 正文
NOIP信息学奥赛信息竞赛编程竞赛

【NOIP试题】某科学的矩阵

主编主编 NOIP信息学奥赛 2017-07-28 8,438 52

最近在Codevs上面做了道题,个人感觉这题在入门级别的模拟是比较有代表性的。

【NOIP试题】某科学的矩阵-少儿编程教育网

这是小弟第一次写解题报告,而且编程水平有待提高,故代码可能有些乱。大神看到了有什么地方有错误或者有什么要改进的地方,欢迎指出。
好了,下面进入正题。这题在Codevs的题号是1160,题目名字叫蛇形矩阵。但是我在网上搜索了一下发现,真正的蛇形矩阵应该是Problem 1083………这个就不管那么多了。

题目是这样的:小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和。

这题一看还挺有意思的。就是数字在矩阵中心绕着扩大。。如果是在纸上写的话,相信每个人都会。但是关键问题是……这个问题是要编成程序的。规律在哪呢?

在一开始的时候,向右增加1位,第二次向上增加1位,第三次向左增加2位,第四次向下增加2位,第五次又向右增加三位……基本规律也就明白了

下面上程序:

#include
int main()
{
int tot=1,n,x,y,l=0,a[109][109];
//将整个二维数组置0
for(int i=0;i<1
00;i++){

for(int j=0;j<100;j++)
a[i][j]=0;
}
scanf("%d",&n);
//整个矩阵的中心(也就是起点)=1
a[(n-1)/2][(n-1)/2]=1;
//等会操作使用的x,y指向矩阵中心
x=(n-1)/2; y=(n-1)/2;
//模拟开始
while(tot<=n*n) //当计数器小于边的平方时循环
{
int x1=x,y1=y; l++; //l就是本次需要加的边数
for(int i=x1;i<x1+l;i++){
x++; tot++; a[x][y]=tot;
}
x1=x;y1=y;//因为x,y时刻在变化,所以先设定一个变量存储本次行走的起点
for(int i=y1;i<y1+l;i++){ y++; tot++; a[x][y]=tot; } l++;//两边过后步长加大1 x1=x;y1=y; for(int i=x1;i>x1-l;i--){
x--; tot++; a[x][y]=tot;
}
x1=x;y1=y;
for(int i=y1;i>y1-l;i--){
y--; tot++; a[x][y]=tot;
}
}
int djx=0; //对角线之和
//打以下代码时思维比较混乱QAQ,所以代码比较乱。
for(int j=n-1;j>=0;j--){
for(int i=0;i<n;i++){
printf("%d ",a[i][j]);
if(j==i) djx+=a[i][j]; //对角线判断
}
printf("\n");}
//又写了一个模拟。。不知道当时怎么想的。。
int f=0,e=n;
for(f;f<=n;f++){
e--;
djx+=a[f][e];
}
//因为矩阵中心元素算了两遍,所以减去一个
printf("%d",djx-a[(n-1)/2][(n-1)/2]);
return 0;
}

内容都在代码里有注释讲解,就不详细介绍了……个人感觉这个代码比较糙。欢迎大神前来吐槽……
好了这份解题报告到这里也就差不多了吧……下面说一下我和lyx关于OI学习解题报告的约定:

  • 近期每人完成一份基础题的解题报告
  • 3,4,5月每人每月完成一份解题报告,内容以算法基础为主
  • 暑假另做安排

*6月因为我们都要中考了,so……
好了这次的解题报告#1:某科学的矩阵就在这结束啦~各位大神可以在评论区随意吐槽

 

喜欢 (52)
打赏
  • 打赏支付宝扫一扫
  • 打赏微信扫一扫
微博 微信 QQ

微信扫一扫,分享到朋友圈

微信公众号
编程少年Scratch实物积木
少儿编程教育-微信公众号
上一篇

信息学奥林匹克竞赛难吗?

下一篇

【NOIP试题】桶排序(做题感悟)

猜你喜欢

  • 第二届全国中学生网络安全竞赛即将在西安电子科大举办!

    第二届全国中学生网络安全竞赛即将在西安电子科大举办!

  • 严查违规竞赛,29项全国中小学生竞赛活动名单公布!

    严查违规竞赛,29项全国中小学生竞赛活动名单公布!

  • 教育部:2019年度中小学生全国性竞赛活动名单公示

    教育部:2019年度中小学生全国性竞赛活动名单公示

  • 第二十届全国中小学电脑制作活动通知

    第二十届全国中小学电脑制作活动通知

  • 2018年全国青少年创意编程大赛,终评活动即将开启!

    2018年全国青少年创意编程大赛,终评活动即将开启!

  • STEAM教育专题 | 源自硅谷的机器人教育机构萝卜太辣

    STEAM教育专题 | 源自硅谷的机器人教育机构萝卜太辣

主编
主编官方

我真的不是自黑!

中国STEAM教育2018年度风云榜

微信公众号

推荐专题

  • 有趣的少儿编程游戏推荐

    查看专题
  • 国外优秀的少儿编程教育

    查看专题
  • S科学-T技术-E工程-M数学

    查看专题

猜你喜欢

  • STEAM教育专题 | 乐博乐博机器人教育解决中国素质教育痛点
    2018-10-05

    STEAM教育专题 | 乐博乐博机器人教育解决中国素质教育痛点

  • Java少儿编程神器Greenfoot(2)工具下载和编程环境

    Java少儿编程神器Greenfoot(2)工具下载和编程环境

    2019-06-13
  • 北大校长一针见血:管好孩子这10点,将来考清华北大很轻松!

    北大校长一针见血:管好孩子这10点,将来考清华北大很轻松!

    2018-04-27
  • 范浩强:国家队的信息学奥赛小当家,投身人工智能产业研究

    范浩强:国家队的信息学奥赛小当家,投身人工智能产业研究

    2018-03-14
  • Scratch少儿编程教程-第2课-键盘控制角色

    Scratch少儿编程教程-第2课-键盘控制角色

    2017-06-12

热门文章

  • 新型冠状病毒肺炎,儿童真的不易感?专家组组长:论据尚不充分!
    2020-01-24 57,448

    新型冠状病毒肺炎,儿童真的不易感?专家组组长:论据尚不充分!

  • 9个青少儿防疫问题,北京大学国际医院儿科专家权威解答!
    2020-02-08 45,150

    9个青少儿防疫问题,北京大学国际医院儿科专家权威解答!

热门标签

鲨鱼公园高考改革高考加分青橙创客青少儿防疫阿部和广错误观念逻辑思维费米科学贝尔科教谷歌教育计算机科学计算机思维解决方案西瓜创客

微信公众号

热门文章 热门标签 年度归档 少儿编程教育联盟

Copyright © 2021 少儿编程教育网 粤ICP备17057575号 · Designed by shaoerbc.org

大家都在搜

  • Scratch教程
  • scratch2下载
  • Scratch编程
  • 编程思维
  • 信息学奥赛
  • STEM教育
  • 编程一小时
  • 自主招生
  • 少儿编程竞赛

关注我们的公众号

微信公众号