华为OD机试题:数独
数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。
如有多解,输出一个解
输入描述:
输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。
输出描述:
输出九行,每行九个空格隔开的数字,为解出的答案。
#解题想法:首先九宫格判断规则,横、竖、宫格内数字不重复,所以有三种判断方法,取交集看共享的是否
为一个,是一个就填写,但由于存在多解(且此时交集为两个元素),故增加试错机制,当发现零点个数没有
发生变化,便进行试验,并记录当前节点状态,后面如果发现零点的三种判断方法没有交集,便恢复状态,
并确认另外一个值是正确的import sys
def heng(i, j, ll):n = []for m in range(0, 9):if ll[i][m] != 0:n.append(ll[i][m])return list(set([1, 2, 3, 4, 5, 6, 7, 8, 9]) - set(n))
def shu(i, j, ll):n = []for m in range(0, 9):if ll[m][j] != 0:n.append(ll[m][j])return list(set([1, 2, 3, 4, 5, 6, 7, 8, 9]) - set(n))
def gong(i, j, ll):m1 = i // 3m2 = j // 3n = []for a in range(m1 * 3, m1 * 3 + 3):for b in range(m2 * 3, m2 * 3 + 3):if ll[a][b] != 0 :n.append(ll[a][b])return list(set([1, 2, 3, 4, 5, 6, 7, 8, 9]) - set(n))
if __name__ == "__main__":# ll = [# [0, 0, 8, 7, 1, 9, 2, 4, 5],# [9, 0, 5, 2, 3, 4, 0, 8, 6],# [0, 7, 4, 8, 0, 6, 1, 0, 3],# [7, 0, 3, 0, 9, 2, 0, 0, 0],# [5, 0, 0, 0, 0, 0, 0, 0, 0],# [8, 6, 1, 4, 0, 3, 5, 2, 9],# [4, 0, 0, 0, 2, 0, 0, 0, 8],# [0, 0, 0, 0, 0, 0, 0, 7, 0],# [1, 0, 7, 0, 6, 8, 0, 5, 0],# ]while True:isCon = Truell = []for i in range(9):tp = sys.stdin.readline().strip()if not tp:isCon = Falsebreaktp =[int(i) for i in tp.split(' ')]ll.append(tp)if isCon ==False:breakdd=[]q=0r=0w=0for i in range(0, 9):for j in range(0, 9):if ll[i][j] == 0:dd.append([i,j])while len(dd)>0 :ko = len(dd)for r in dd:res = []i=r[0]j=r[1]h1 = heng(i, j, ll)s1 = shu(i, j, ll)g1 = gong(i, j, ll)for o in h1:if o in s1 and o in g1:res.append(o)if len(res) ==0:dd=dlll[q][r]=wdd.remove([i, j])continueif len(res) == 1:ll[i][j] = res[0]dd.remove([i,j])else:continueif ko== len(dd):res = []i = dd[0][0]j = dd[0][1]h1 = heng(i, j, ll)s1 = shu(i, j, ll)g1 = gong(i, j, ll)for o in h1:if o in s1 and o in g1:res.append(o)ll[i][j] = res[0]dl = dd.copy()q=ir=jw=res[1]dd.remove([i, j])for x in ll:x=list(map(str,x))y=" ".join(x)print(y)
华为OD机试题:数独相关推荐
- 华为OD机试题 - 数据分类(JavaScript)| 代码+思路+重要知识点
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - ...
- 华为OD机试题 - 找出重复代码(JavaScript)| 包含代码编写思路
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - ...
- 华为OD机试题 - 剩余可用字符集(JavaScript)| 含思路
华为OD机试题 最近更新的博客 使用说明 本篇题解:剩余可用字符集 题目 输入 输出 示例一 输入 输出 说明 Code 解题思路 华为OD其它语言版本 最近更新的博客 华为od 2023 | 什么是 ...
- 华为OD机试题 - 优选核酸检测点(JavaScript)| 代码+思路+重要知识点
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - ...
- 华为OD机试题 - 最大排列(JavaScript)| 代码,编码思路,解题知识点
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - ...
- 华为od机试题4 真题
华为od机试题 真题 58.处理所有作业总时长 53.最大停车距离 52.磁盘容量排序 51.非严格递增连续数字序列长度 50.均分糖果 48.没有相同字符的元素长度乘积的最大值 47. 相对开音节结 ...
- 华为od机试题1 真题
华为od机试题 真题 86.射击比赛成绩排序 85.计算屏幕字母数量 84.组成最大数字 82.输出字符串中最小数字 81.数字4的个数 80.整数排列 79.多条件排列 78.时间排序 以下题目附带 ...
- 华为od机试题9 真题
华为od机试题 真题 9.寻找重复字符 7.字符串翻转 6.小朋友身高排序 5.CPU最少执行时间 4.猴子爬山 3.输出信元的值 2.指定元素对最小和 1.勾股数元组 以下题目附带Java解法,是我 ...
- 华为od机试题6 真题
华为od机试题 真题 35.输出满足条件的数对 34.寻找众数中的中位数 33.分配内存 32.窗口和的最大值 31.求整数的连续自然数之和的表达式 30.矩阵的最大值 以下题目附带Java解法,是我 ...
- 华为OD机试题整理,已经写了参考代码
华为OD机试题整理,已经写了参考代码 .链接如下: 华为OD机试题整理链接
最新文章
- vue获取dom元素注意问题
- solrj 使用记录 - 添加文档
- .NETFramework-Web.Mvc:ActionResult
- Django运行报错Invalid HTTP_HOST header: ‘0.0.0.0:8000‘. You may need to add ‘0.0.0.0‘ to ALLOWED_HOSTS.
- MySQL在多表上创建视图
- Active Diretory 全攻略(五)--规划和建立组
- 望城——民营经济的“旺城”
- 【算法设计与分析】Dijskra算法代码:Java版
- 【框架篇】mvc、mvp、mvvm使用关系总结
- JavaScript学习随记——面向对象编程(继承)
- intellij IDEA--- 报inspects a maven model for resolution problems
- [js] 渲染树构建、布局及绘制
- vue的mixins属性
- VMware vCloud与Zend Server实现PHP应用程序自动化交付
- ajax回显500因为#与$的原因
- python 取列表偶数和奇数位置的值
- 我的地盘我做主—玩转Python函数和变量
- FileZilla Server下载以及安装使用
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
- java的维护_天了噜,Java 8 要停止维护了!