题目一:数独验证

题目描述:

数独是一种填数游戏,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。

每个数独有唯一解。下图是一个数独填数后的解(黑色数字是已知数字,绿色数字是填数数字)。

输入填数后的9×9盘面,写函数判断其是否是解,返回1或0。

输入要求:

测试次数

每组测试数据是1个9*9的数字阵(元素值:1~9)

输出要求:

每组测试数据,如果满足数独要求,输出YES,否则输出NO

#include<iostream>
#include<cmath>
#include<iomanip>
#include<algorithm>
#include<cstring>
using namespace std;int row(int arr[][10])
{int count[10], totalsub;//用count记录每个数字出现的次数,如果符合条件每个数字只出现一次for (int i = 1; i <= 9; i++){memset(count, 0, 10 * sizeof(int));for (int j = 1; j <= 9; j++){count[arr[i][j]]++;}totalsub = 1;for (int k = 1; k <= 9; k++){totalsub *= count[k];//累乘只能等于1}if (totalsub != 1){return 0;}}return 1;
}int col(int arr[][10])//与行同理
{int count[10], totalsub;for (int i = 1; i <= 9; i++){memset(count, 0, sizeof(int) * 10);for (int j = 1; j <= 9; j++){count[arr[j][i]]++;}totalsub = 1;for (int k = 1; k <= 9; k++){totalsub *= count[k];}if (totalsub != 1){return 0;}}return 1;
}
int section(int arr[][10])
{int count[10], totalsub;for (int i = 1; i <= 9; i++)//一共有9个区域,必须全部符合{int relrow, relcol;relrow = ((i - 1) / 3) * 3 + 1;//找出9个区域对应的行列relcol = ((i - 1) % 3) * 3 + 1;memset(count, 0, sizeof(int) * 10);for (int j = relrow; j < relrow + 3; j++)//判断原理同上{for (int k = relcol; k < relcol + 3; k++){count[arr[j][k]]++;}}totalsub = 1;for (int k = 1; k <= 9; k++){totalsub *= count[k];}if (totalsub != 1){return 0;}}return 1;
}int main() {int t;cin >> t;while (t--){int arr[10][10];for (int i = 1; i <= 9; i++){for (int j = 1; j <= 9; j++){cin >> arr[i][j];}}if (row(arr) && col(arr) && section(arr))//分为行列区域三个模块进行判断{cout << "YES" << endl;}else{cout << "NO" << endl;}}return 0;
}

问题二:数组求解

题目描述:

数独是一种填数游戏,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。

每个数独有唯一解。下图是一个数独填数后的解(黑色数字是已知数字,绿色数字是填数数字)。

在上题数独验证的代码上,增加函数,根据输入的9*9盘面已知数字,求解数独,并输出解。

输入要求:

输入1个9*9的数字阵,数字范围0-9,0表示该位置无数字,需填数。

输出要求:

输出数独解(9*9的矩阵值)

#include<iostream>
#include<cmath>
#include<iomanip>
#include<algorithm>
#include<cstring>
using namespace std;int flag;
int simplerepeat(int arr[][10], int x, int y, int site)
{for (int i = 1; i <= 9; i++)//每一列不重复{if (arr[x][i] == site)//如果重复就返回0到上一级{return 0;}}for (int j = 1; j <= 9; j++)//每一行不重复{if (arr[j][y] == site)//如果重复就返回0到上一级{return 0;}};return 1;
}int sectionrepeat(int arr[][10], int x, int y, int site)
{int partx, party;partx = ((x - 1) / 3) * 3 + 1;party = ((y - 1) / 3) * 3 + 1;for (int i = partx; i < partx + 3; i++)//每个区域里也不重复,如果重复就返回上一级{for (int j = party; j < party + 3; j++){if (arr[i][j] == site){return 0;}}}return 1;
}void DFS(int arr[][10], int x, int y)
{if (y > 9)//如果列数大于9就换行{x++;y = 1;}if (x > 9)//如果行数大于9就输出最终解{for (int i = 1; i <= 9; i++){for (int j = 1; j <= 9; j++){cout << arr[i][j];if (j != 9){cout << " ";}else{cout << endl;}}}return;}if (arr[x][y] == 0){for (int i = 1; i <= 9; i++){if (simplerepeat(arr, x, y, i) && sectionrepeat(arr, x, y, i)){arr[x][y] = i;//符合条件就赋值DFS(arr, x, y + 1);//然后遍历下一个位置}}arr[x][y] = 0;//遍历完返回上一级}else//有数就直接下一个位置{DFS(arr, x, y + 1);}
}int main()
{int arr[10][10];for (int i = 1; i <= 9; i++)//输入需要求解的数独{for (int j = 1; j <= 9; j++){cin >> arr[i][j];}}DFS(arr, 1, 1);return 0;
}

C语言程序设计基础|数独相关推荐

  1. c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...

    C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt 主要内容 课程概述 为什么选择C语言作为入门课程? C语言 ...

  2. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...

    周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

  3. c语言程序设计编辑与调试环境实验报告,01程序设计基础实验报告_C语言程序设计基础.doc...

    01程序设计基础实验报告_C语言程序设计基础 程序设计基础 实验报告 题 目: C语言程序设计基础 院 (部): 管理工程学院 专 业: 信息管理与信息系统 班 级: 信管101 姓 名: 张三 学 ...

  4. java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章

    java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...

  5. 《C语言程序设计基础》第2章作业,清华大学出版社-图书详情-《C语言程序设计基础实验与题解》...

    C语言是国内外广泛使用的一种程序设计语言,也是初学程序设计人员的首选入门程序设计语言.C语言具有表达能力强.代码质量高和可移植性好等特点,既具有高级语言的特点,又具有汇编语言的优点,越来越受到人们的欢 ...

  6. 对c语言和程序设计基础的体会,C语言程序设计基础与应用

    <C语言程序设计基础与应用(高等院校计算机教育系列教材)>由刘丽.朱俊东.张航编著,本书内容由浅入深.循序渐进,介绍C语言的基本语法知识和程序设计等内容,同时兼顾了全国计算机等级考试二级C ...

  7. python语言程序设计2019版第二章课后答案-python语言程序设计基础课后答案第二章...

    python语言程序设计基础课后答案第二章 以下合法的用户自定义标识符是____________. 导入模块或者模块中的元素要使用关键字________ . 下列哪个函数是用来控制画笔的尺寸的____ ...

  8. python语言程序设计2019版第二章课后答案-python语言程序设计基础(嵩天)第二章课后习题...

    **第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) 一维数组定义的一般形式为:类型名, ...

  9. python语言程序设计嵩天-python语言程序设计基础(嵩天版),第二章程序练习题...

    python语言程序设计基础(嵩天版),第二章程序练习题 欢迎访问江南烧酒的博客 2.2汇率兑换程序.按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序. """ ...

最新文章

  1. 基于JDK1.8---HashMap源码分析
  2. 审计 Linux 系统的操作行为的 5 种方案对比
  3. 更换mysql_这些被你忽视的MySQL细节,可能会让你丢饭碗!
  4. 把函数包起来就是一个R包 - 完整开发指南
  5. Python练习:整数加减和
  6. 宴席终将散场!苹果首席设计师将离职创业 已供职于苹果近30年
  7. leetcode最大矩形_柱状图中的最大矩形
  8. halcon 仿射变换和区域跟随
  9. (原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻
  10. python制作小游戏大全_python制作小游戏(一)
  11. 计算机网络工程师模拟题库,计算机网络工程师模拟题56.doc
  12. 秋叶一键重装系统连接服务器失败,秋叶一键重装系统win7系统安装和使用DAEMONToolsLite的方法【图文教程】...
  13. 来!程序猿教你们玩微信代码~
  14. 使用Ps为图像批量制作水印
  15. 日历查询---在线阴阳历转换器
  16. linux dolphin模拟器,dolphin模拟器32位64位
  17. 海思Hi3518E MPP学习_02视频输入(VI模块)
  18. 力扣刷题 DAY_75 贪心
  19. 地理地貌3D打印案例
  20. KBEngine warring项目源码阅读(一) 项目简介和注册

热门文章

  1. 复向量的内积(例题详解)
  2. 大话 goroutine
  3. 华为OD机试 - 寻找相似单词(Java JS Python)
  4. (转载)供电电路切换与锂电池充电电路设计
  5. 好用PC端软件分享,来看看有没有你的心头好
  6. 微信活动——微信房产经纪公司评比活动
  7. python调用gpu进行运算_用python做GPU计算(1)——安装以及配置
  8. 28个在线学习网站让你变身齐天大圣!
  9. 人大金仓数据库.net core 开发接口
  10. Spring是什么?SpringMVC是什么?Spring和springMVC的区别?