蓝桥杯算法题:九宫幻方

小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将 1∼9 不重复的填入一个 3×3 的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。

三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。

4 9 2

3 5 7

8 1 6

有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。

现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,交给邻居家的小朋友来进行还原,并且希望她能够判断出究竟是不是只有一个解。

而你呢,也被小明交付了同样的任务,但是不同的是,你需要写一个程序~

输入格式:

一个 3×3 的矩阵,其中为 0 的部分表示被小明抹去的部分。数据保证给出的矩阵至少能还原出一组可行的三阶幻方。

输出格式:

如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出 "Too Many"。

输入样例

0 7 2
0 5 0
0 3 0
输出样例:

6 7 2
1 5 9
8 3 4

我的思路:其实看到这道题,还是觉得该用爆搜,题目说每一种三阶幻方都由下边这个原始幻方旋转或镜像操作得来,那我就直接爆搜,一种幻方有镜像和旋转两种操作,将已知的可行的幻方镜像后判断是否满足,满足则ans+1,然后又将幻方旋转,得到另一个幻方,继续判断,旋转四次会变为原来的幻方,就重复了,这就是结束条件(注意,一个幻方镜像生成的新幻方不需要再旋转生成新幻方B,因为后边会有幻方通过镜像和旋转生成幻方B,如果将镜像旋转就会有数据重复)

4 9 2

3 5 7

8 1 6

代码:

 

#include<bits/stdc++.h>
using namespace std;
int a[3][3]={{4,9,2},{3,5,7},{8,1,6}};
int target[3][3];
int ans=0;
int b[3][3];
bool check(int a[][3]){for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(target[i][j]!=0&&target[i][j]!=a[i][j]){return false;}}}return true;
}
void counter(int a[][3]){if(check(a)){ans+=1;if(ans==1){for(int i=0;i<3;i++){for(int j=0;j<3;j++)b[i][j]=a[i][j];}}}
}
void dfs(int a[][3],int count){if(count==4)return;counter(a);//镜像int temp[3][3]; for(int i=0;i<3;i++){for(int j=0;j<3;j++)temp[i][j]=a[i][2-j];}counter(temp);//旋转 for(int i=0;i<3;i++){for(int j=0;j<3;j++){temp[i][j]=a[2-j][i];}}dfs(temp,count+1); 
}
int main(){for(int i=0;i<3;i++)for(int j=0;j<3;j++)cin>>target[i][j];dfs(a,0);if(ans==1){for(int i=0;i<3;i++){for(int j=0;j<3;j++)cout<<b[i][j]<<" ";cout<<endl;}}else cout<<"Too Many";
}

不过,我看了别人的题解,他直接将幻方的所有可能写了出来!!!然后直接一一判断是否与输入相符即可(因为可能的幻方好像也就八个,很容易列出来,这算是我没想到的点了)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.c++入门(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)

1.c的第一个程序 // 方法一 #include<iostream>// namespace为命名空间的关键字&#xff0c;std为空间名&#xff1b; C标准库的东西放进std命名空间 using namespace std; int main() {cout << "hello world" << endl;return 0; }// 方法二 #in…

YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Unity构建详解(6)——SBP的Bundle写操作生成

以下三个操作实际上是为了得到构建Bundle需要的其他参数&#xff0c;最关键的Bundle组装参数在上文已经说过了&#xff0c;至于这三个操作的具体细节不用过于追究&#xff0c;一般不怎么会取修改。 这些参数采用命令模式被封装起来&#xff0c;这是常见的参数非常多的时候的处…

轻量级容器运行时containerd安装

1、yum安装 1.1、获取阿里云YUM源 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo1.2、查看YUM源中Containerd软件 yum list | grep containerd containerd.io.aarch64 …

train_reader 训练数据提供器。创建Executor执行器。数据读取器(DataFeeder)

目录 农作物病害智能识别 -AttributeError Traceback (most recent call last)/tmp train_reader 训练数据提供器 train_reader

【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.6p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

【leetCode】2810. 故障键盘

文章目录 [2810. 故障键盘](https://leetcode.cn/problems/faulty-keyboard/)思路一&#xff1a;模拟代码&#xff1a;思路二&#xff1a;双端队列代码&#xff1a; 2810. 故障键盘 思路一&#xff1a;模拟 用StringBuilder来拼贴字符遍历字符串&#xff0c;如果遇到i,对拼贴好…

【LintCode】448 · 二叉查找树的中序后继

题目 描述 给定一个二叉查找树(什么是二叉查找树),以及一个节点,求该节点在中序遍历的后继,如果没有则返回 null。 保证 p 是给定二叉树中的一个节点。(您可以直接通过内存地址找到 p) 样例 样例1: 输入: {1,#,2}, node with value 1 输出: 2 解释: 1\2样例2: 输入…

男人圣经 9

男人圣经 9 消费生活 VS 生产生活消费爱情 VS 生产爱情 消费生活 VS 生产生活 消费主义在诱导大众&#xff0c;令他们追求非自己之所需&#xff0c;借贷消费、追逐梦幻之物&#xff0c;而后自豪于此。这一切&#xff0c;尽管对于他们的人生毫无增益&#xff0c;令他们日益贫困…

注解,自定义注解和元注解

1.注解 1.1.注解概述、作用 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0…

《深入浅出多模态》:多模态经典模型CLIP

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

逆向案例14——cnki学术翻译AES加密分析,涉及保持会话和获取token值

python代码&#xff1a; import execjs import requests UA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" token_url "https://dict.cnki.net/fyzs-front-api/getToken" url …

面试算法-140-三数之和

题目 nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1&#xff1a; 输入&#xff1a;nums [-1,0,1,2,-1,-4] 输出&#xf…

图像分割-RSPrompter

文章目录 前言1. 自动化提示器1.1 多尺度特征增强器1.2 RSPrompterAnchor-based PrompterQuery-based Prompter 2. SAM的扩展3. 结果WHU数据集NWPU数据集SSDD数据集 前言 《RSPrompter: Learning to prompt for remote sensing instance segmentation based on visual foundati…

Linux操作系统之docker基础

目录 一、docker 1.1 简介 1.2 安装配置docker 二、dockerfile 1.1、简介 1.2、dockerfile 关键字 一、docker 1.1 简介 容器技术 容器其实就是虚拟机&#xff0c;每个容器可以运行不同的系统【系统是以linux为主的】 为什么要使用docker&#xff1f; docker容器之间相互隔…

一文读懂Memory consistency model (内存模型)

Memory consistency model又称Memory model (内存模型)&#xff0c;定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。Memory model定义了软硬件接口规范&#xff0c;以便程序员预料硬件会有什么行为&#xff0c;而硬件实现者知道可以使用什么样…

MySQL面试题系列-9

MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management System&#xff0c;关系数据…

牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f 思路 前缀树动态规划参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

GO并发总是更快吗?

许多开发人员的一个误解是,并发解决方案总是比串行更快,大错特错。解决方案的整体性能取决于许多因素,例如,结构的效率(并发)、可以并行处理的部分以及计算单元的竞争程度。 1. GO调度 线程是操作系统可以执行的最小单元。如果一个进程想要同时执行多个动作,它可以启动…

LeetCode 264 丑数II

题目信息 LeetoCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题目理解 所谓丑数就是满足: (2^x)*(3^y)*(5^z), 其中,x,y,z > 0的数。 题目要求的是求严格递增的第n个丑数。 最小堆写法 可以维护一个小顶堆&#xff0c;每一次拿出堆顶元素&#xff0c;然后分别…