哭吧!喜欢玩数独游戏的亲们!你被取代了——C语言解数独
来源:互联网 发布:淘宝转化率25%算正常吗 编辑:程序博客网 时间:2024/05/17 22:21
当时大学新买的Nokia手机上有这个游戏,玩着玩着突然想能不能写个程序来解题,因为当时在学C语言,于是乎……
原文在QQ空间,现在整理到CSDN上供大家吐槽
先上代码
#include<stdio.h>#include<conio.h>int str[9][9];void output();void main(){ //定义 int i,j,k,num,flag=0,count=0; int control=0,con=0; int cishu=0; //输入 printf("请输入81个数,空位用“0”代替:\n"); for(i=0;i<9;i++) { for(j=0;j<9;j++) { scanf("%1d",&str[i][j]); } } //处理 while(con==0) { con=1; for(i=0;i<9;i++) { for(j=0;j<9;j++) { if(str[i][j]==0) { ////////////////////////////////////////////////////////////////////////// //试值开始 for(num=1;num<=9;num++) { flag=0; //不同于九格 if(i%3==0&&j%3==0) { if(num!=str[i][j+1]&&num!=str[i][j+2]&&num!=str[i+1][j]&&num!=str[i+1][j+1]&&num!=str[i+1][j+2]&&num!=str[i+2][j]&&num!=str[i+2][j+1]&&num!=str[i+2][j+2]) { flag=1; } } else if(i%3==0&&j%3==1) { if(num!=str[i][j+1]&&num!=str[i][j-1]&&num!=str[i+1][j]&&num!=str[i+1][j+1]&&num!=str[i+1][j-1]&&num!=str[i+2][j]&&num!=str[i+2][j+1]&&num!=str[i+2][j-1]) { flag=1; } } else if(i%3==0&&j%3==2) { if(num!=str[i][j-2]&&num!=str[i][j-1]&&num!=str[i+1][j]&&num!=str[i+1][j-2]&&num!=str[i+1][j-1]&&num!=str[i+2][j]&&num!=str[i+2][j-2]&&num!=str[i+2][j-1]) { flag=1; } } else if(i%3==1&&j%3==0) { if(num!=str[i][j+1]&&num!=str[i][j+2]&&num!=str[i+1][j]&&num!=str[i+1][j+1]&&num!=str[i+1][j+2]&&num!=str[i-1][j]&&num!=str[i-1][j+1]&&num!=str[i-1][j+2]) { flag=1; } } else if(i%3==1&&j%3==1) { if(num!=str[i][j+1]&&num!=str[i][j-1]&&num!=str[i+1][j]&&num!=str[i+1][j+1]&&num!=str[i+1][j-1]&&num!=str[i-1][j]&&num!=str[i-1][j+1]&&num!=str[i-1][j-1]) { flag=1; } } else if(i%3==1&&j%3==2) { if(num!=str[i][j-2]&&num!=str[i][j-1]&&num!=str[i+1][j]&&num!=str[i+1][j-2]&&num!=str[i+1][j-1]&&num!=str[i-1][j]&&num!=str[i-1][j-2]&&num!=str[i-1][j-1]) { flag=1; } } else if(i%3==2&&j%3==0) { if(num!=str[i][j+1]&&num!=str[i][j+2]&&num!=str[i-2][j]&&num!=str[i-2][j+1]&&num!=str[i-2][j+2]&&num!=str[i-1][j]&&num!=str[i-1][j+1]&&num!=str[i-1][j+2]) { flag=1; } } else if(i%3==2&&j%3==1) { if(num!=str[i][j+1]&&num!=str[i][j-1]&&num!=str[i-2][j]&&num!=str[i-2][j+1]&&num!=str[i-2][j-1]&&num!=str[i-1][j]&&num!=str[i-1][j+1]&&num!=str[i-1][j-1]) { flag=1; } } else if(i%3==2&&j%3==2) { if(num!=str[i][j-2]&&num!=str[i][j-1]&&num!=str[i-2][j]&&num!=str[i-2][j-2]&&num!=str[i-2][j-1]&&num!=str[i-1][j]&&num!=str[i-1][j-2]&&num!=str[i-1][j-1]) { flag=1; } } //不同与九格结束 //不同于行列检测 if(flag==1) { //不同于行 for(k=0;k<9;k++) { if(k!=i) if(num==str[k][j]) { control=1; } } //不同于列 if(control==0) for(k=0;k<9;k++) { if(k!=j) if(num==str[i][k]) { control=1; } } //不同于行列结束 }//不同于行列检测结束 if((control==0)&&(flag==1)) { str[i][j]=num; count++; } control=0; }//试值结束 if(count>1) { str[i][j]=0; } count=0; }//if(str[i][j]==0)控制结束 }//每行中每列处理结束 }//每行处理结束 //检测是否全部赋值 for(i=0;i<9;i++) for(j=0;j<9;j++) { if(str[i][j]==0) { con=0; } } //分次输出 printf("第%d次处理",++cishu); output(); }//while(con)结束 //输出 output(); //结束 getch();}//main结束void output(){ int i,j; printf("答案为:\n"); for(i=0;i<9;i++) { for(j=0;j<9;j++) { printf(" %d ",str[i][j]); } printf("\n"); }}
别骂街,毕竟当时大一……
思路
- 输入:有数写数,空写0
- 循环中以0为控制条件,如果a[i][j]==0进行操作。
if(a[i][j]==0) - 每行每列都不同
a[i][j]!=a[i][m]&&a[i][j]!=a[m][j] - 每九个数不同
如果行号对三求余 且列号对三求余 - 如果一个位置被连续两次或以上赋值,归零
用count++来控制 - 测试用数据
0 7 0 3 0 4 0 6 00 4 0 0 5 0 1 0 83 0 0 9 0 1 4 2 70 2 8 0 0 5 3 0 00 6 9 0 0 2 7 4 00 0 5 1 0 6 9 0 02 0 3 0 1 9 0 0 46 0 0 0 0 3 0 0 10 0 0 7 0 8 2 0 0
0 0
- 哭吧!喜欢玩数独游戏的亲们!你被取代了——C语言解数独
- C语言解数独
- C语言——解数独程序[源码]
- C语言——解数独程序[源码]
- 解数独游戏的源代码
- 数独 C语言 解数独
- C语言程序解数独问题
- 解数独游戏的程序构思想法
- C程序解数独
- 回溯法解数独游戏
- 解数独算法,用C语言递归实现
- 经典数独游戏+数独求解器—纯C语言实现
- 解数独算法的研究
- 解数独游戏(Java实现)
- DLX算法解数独游戏 Java版
- 回溯法----- 解数独游戏(1)
- 回溯法------ 解数独游戏(2)
- 使用java程序帮你解数独
- 【设计模式】单例模式
- 实习杂记(22):仿照VideoView+MediaPlayerController做视频
- Android中webview js与native方法互相调用
- 解决java.lang.OutOfMemoryError: unable to create new native thread问题
- 【代码安全】浅谈安卓开发代码混淆技术
- 哭吧!喜欢玩数独游戏的亲们!你被取代了——C语言解数独
- zabbix中文乱码解决方法
- Eclipse和MyEclipse的区别
- php下的命令行执行
- LATEX--排版神器
- XML、JSON及其解析
- node.js事件循环
- navicat运行sql文件导入大文件失败的问题
- trunc(sysdate)的含义是什么