数独原始版,Excel 能不能用函数来破解数独游戏
作者:本站作者
本文目录一览
1,Excel 能不能用函数来破解数独游戏
有比较好的算法就可以用Excel来解数独;实在不行就用穷举法,VBA是可以实现的用两个九×九的区域,一个存放原始的题目,另一个存放运算过程和结果。具体运算:一、复制题目到运算过程区域。二、空白单元格赋值123456789三、根据横向或纵向或小的三×三方格,根据单个的数据,将多个数据的单元格剔除各个单个的数据。四、如果第三步无法得到结果,那么可以假设一个可选择的单元格,选择其一,重复步骤三。五、判断假设是否出错了,是的话,改变四,否则继续四。
2,有数独原始版小游戏的中文版下载吗
感觉你去《768小游戏》自己找一下啊~进去直接搜 数独有很多版本 也有很多都是中文的
3,我已经解出来了这是原始数独
218 673 954 459 281 673 736 954 182 147 598 326 382 416 597 965 732 418 694 127 835 821 365 749 573 849 261
4,天龙八部3九宫盒
这个很简单,喜欢玩9宫格或数列矩阵的很快就能弄出来。4 1 5 2 3 2 4 1 3 51 3 4 5 25 2 3 1 43 5 2 4 1照上面得就ok了。那个做一两个没用啊 很好做 没什么惩罚的 做那个一般都是为了换雕文用的 但是换雕文要一百多个 很麻烦 现在都不做那个了 买个雕文也才100多J而已不一样的,九宫盒顾名思义有9个任务,1-4分别是按图找地、按坐标找怪、找人(必须是异性好友)、找物(师门任务用品),5-8跟1-4是一样的,第9个是数独,相当容易。 你朋友说的不好做指的是九宫盒任务有一定几率会消失的,消失以后就得重新开任务,很费盒子,每天能做的九宫盒任务只有27次左右,超过这个数任务就会强制消失,而且第三宫和第七宫是找有缘的异性好友的,这个最麻烦,我异性好友里没一个有缘,我建了2个小号才开到有缘人。 不过总体来说九宫盒任务还是挺好玩的,我就为了玩最后的数独一直做,数独的画面特漂亮(PS:任务失败了没惩罚的)九宫格的任务不一样,但是是一个性质的,都是给你一个图,那是一个场景的一个一角,让你到那个角之后再右击宫格,任务完成了,就去苏州交任务,做了几环就能给你天机冰刹什么的,多攒点就可以去变脸那换东西,雕纹啥的。我自我感觉很好做,而且这任务也没有期限,你不自动放弃就永远不会失败,祝你好运!!!
5,数独的由来
00:00 / 10:5070% 快捷键说明 空格: 播放 / 暂停Esc: 退出全屏 ↑: 音量提高10% ↓: 音量降低10% →: 单次快进5秒 ←: 单次快退5秒按住此处可拖拽 不再出现 可在播放器设置中重新打开小窗播放快捷键说明
6,c语言 输入九个数生成一个完整数独99
#include<stdio.h>int result=0; //结果数int main() int a[9][9]; void Sudoku(int a[9][9],int n); printf("请输入数独中的原始数据,没有数据的用0代替。\n"); for(int i=0;i<9;i++) printf("请输入第%d行的9个数:",i+1); for(int j=0;j<9;j++) scanf("%d",&a[i][j]); } printf("数独的解为:\n\n"); Sudoku(a,0); if(result==0) printf("此数独无解!"); return 0;}//输出可行的解void print(int a[9][9]) result++; printf("第%d个填法为:\n",result); for(int i=0;i<9;i++) for(int j=0;j<9;j++) printf("%d ",a[i][j]); if((j==2)||(j==5)) printf(" "); } printf("\n"); if((i==2)||(i==5)) printf("\n"); } printf("\n");}//判断是否可以将第i行、第j列的数设为kbool check(int a[9][9],int i,int j,int k) int m,n; //判断行 for(n=0;n<9;n++) if(a[i][n] == k) return false; } //判断列 for(m=0;m<9;m++) if(a[m][j] == k) return false; } //判断所在小九宫格 int t1=(i/3)*3,t2=(j/3)*3; for(m=t1;m<t1+3;m++) for(n=t2;n<t2+3;n++) if(a[m][n] == k) return false; } } //可行,返回true return true;}//数独求解函数void Sudoku(int a[9][9],int n) int temp[9][9]; int i,j; for(i=0;i<9;i++) for(j=0;j<9;j++) temp[i][j]=a[i][j]; } i=n/9; j=n%9; //求出第n个数的行数和列数 if(a[i][j] != 0) //已经有原始数据 if(n == 80) //是最后一个格子,输出可行解 print(temp); else //不是最后一个格子,求下一个格子 Sudoku(temp,n+1); } else //没有数据 for(int k=1;k<=9;k++) bool flag=check(temp,i,j,k); if(flag) //第i行、第j列可以是k temp[i][j]=k; //设为k if(n == 80) print(temp); else Sudoku(temp,n+1); temp[i][j]=0; //恢复为0,判断下一个k } } }}
7,汉武帝为什么要杀乳母
这不是口舌争辩能办成的事,你一定想获释的话,就在要离开的时候,只是频频回头望着皇上,千万不要说话!这样或许会有一线希望.”奶妈来到汉武帝面前,东方朔也陪侍在武帝身旁,有人对奶妈说:“你太傻了!皇上难道还会想着你哺乳时的恩情吗?”武帝虽然雄才大略,性格刚强,对奶妈也有深深的眷念,于是就动了恻隐之心,马上下令赦免了她.汉武帝乳母恃恩,家人纵横。帝怒,乳母流于边,入辞帝。郭舍人谓曰:“母今出时,但屡顾我,当救母不行。”母如其言,乃顾舍人。舍人骂曰:“妪回顾,何为?帝壮矣,岂假汝乳耶!”帝于是悦,遂不流乳母。 该书的点校者说:“据《史记·滑稽列传》,救乳母者为郭舍人;据《西京杂记》,救乳母者为东方朔。” 的确,在《史记》中,这本是郭舍人的故事,怎么到了《太平广记》中就变成东方朔的了?先看看《西京杂记》怎么说: 武帝欲杀乳母,乳母告急于东方朔。朔曰:“帝忍而愎,旁人言之,益死之速耳。汝临去,但屡顾我,我当设奇以激之。”乳母如言。朔在帝侧曰:“汝宜速去,帝今已大,岂念汝乳哺时恩邪!”帝怆然,遂舍之。(《西京杂记全译》卷二第33则,贵州人民出版社1993年初版,成林、程章灿注译) 译注者说,这一则原名为“方朔设奇救乳母”,少了一个“东”字,但情节与《太平广记》中的那一篇相同,强调的都是“汉武帝欲杀乳母”,与《独异志》里的说法不同。若要看更详尽,更原始的说法,就只能去看《史记·滑稽列传第六十六》了: 武帝时有所幸倡郭舍人者,发言陈辞虽不合大道,然令人主和说。武帝少时,东武侯母常养帝,帝壮时,号之曰“大乳母”。……乳母所言,未尝不听。有诏得令乳母乘车行驰道中。……乳母家子孙奴从者横暴长安中,当道掣顿人车马,夺人衣服。闻于中,不忍致之法。 有司请徙乳母家室,处之于边,奏可。乳母当入至前,面见辞。乳母先见郭舍人,为下泣。舍人曰:“即入见辞去,疾步数还顾。”乳母如其言,谢去,疾步数还顾。郭舍人疾言骂之曰:“咄!老女子何不疾行!陛下已壮矣,宁尚须汝乳而活邪?尚何还顾!”于是人主怜焉悲之,乃下诏止无徙乳母,罚谪谮之者。 原来,汉武帝根本就没有过“欲杀乳母”的念头。他既允许老太太在官道上走马,也愿意纵容她的“子孙奴从者横暴”。因迫于舆论压力,不得不勉强同意流放“乳母家室”的建议。能“令人主和说”的郭舍人,当然很明白汉武帝的心理,当“东武侯母”来找他时,立刻表示愿意帮忙。“东武侯母”一家无赖,汉武帝也是如此,当郭舍人说了那番话,正好顺坡下“令”,以后不许别人再提“徙乳母”事,胆敢再提,便是“谪谮”,当“罚”。 原文中的“罚谪谮之者”,意思很好懂,索隐者还是加了一句注释:“罚谪谮之者,谓武帝罚谪谮乳母之人也。”他是怕读者不能从中品出武帝下的这道“诏”有多无赖吗?或许,是想在此提醒这位老太太的重要性?她究竟是谁,能令汉武帝这么护短? 《史记》索隐说:“东武,县名;侯,乳母姓。”《史记》正义则云:“高祖功臣表云东武侯郭家,高祖六年封。子他,孝景六年弃市,国除。盖他母常养武帝。” 据此,她要么是东武县的一个姓侯的普通老太太,要么是东武侯郭他之母。我猜是后者:汉武帝连皇后卫子夫等都能杀,对一个普通的乳母又何必心忍?刘义庆在《世说新语》中记述这样一个故事:汉武帝刘彻的乳母犯法,武帝打算依法惩办,乳母走后门求救于太中大夫东方朔。以幽默著称的东方朔面授机宜:“此非唇舌所争。
8,求一个回溯代码c语言版递归或非递归
回溯八皇后问题,递归:#include <stdio.h>
#include <stdlib.h>
#define max 8
int queen[max], sum=0; /* max为棋盘最大坐标 */
void show() /* 输出所有皇后的坐标 */
非递归:#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 8int column[N]; int chessboard[N][N]; // 棋盘数组int layout_count; // 可行解个数统计int place(int row);void output(void);void init_chessboard(void);void display_chessboard(void);/***初始化column数组*/void init(void) int i;for(i=0; i<N; i++) column[i] = 0;}}/***非递归回溯算法求n-皇后问题的函数*/void n_queens() init(); // 初始化column数组column[0] = -1;int row = 0;while(row >= 0) column[row]++; while(!place(row)) column[row]++; } if(column[row] < N) if(row == N-1) layout_count++; output(); } else row++; column[row] = -1; } } else row--; }}}/***判断第row行的皇后是否满足问题要求*/int place(int row) int i = 0;while(i < row) if(column[i] == column[row] || abs(i-row) == abs(column[i]-column[row])) return 0; } i++;}return 1;}/***求解过程中,如果找到一个可行解,调用该函数打印输出可行解及其对应的可行棋盘布局*/void output(void) int i;for(i=0; i<N; i++) printf("%3d", column[i]);}printf("\n\n");display_chessboard(); // 根据一种可行解,打印显示可行棋盘布局}/***打印显示一种棋盘布局*/void display_chessboard(void) int i,j;init_chessboard();for(i=0; i<N; i++) chessboard[i][column[i]] = 1; // 将放置皇后的位置置1}for(i=0; i<N; i++) for(j=0; j<N; j++) printf("%3d", chessboard[i][j]); } printf("\n");}printf("\n");}/***棋盘恢复到初始状态*将数组chessboard初始化为0*/void init_chessboard(void) int i,j;for(i=0; i<N; i++) for(j=0; j<N; j++) chessboard[i][j] = 0; }}}int main() n_queens();printf("\n%d\n", layout_count);return 0;}
9,C编程 九格滑块拼图 8码数字
#include "stdafx.h"#include <time.h>using namespace std;void guess( int randomNum[4]);int n=0;void main()cout<<"*****************猜数字小游戏***************"<<endl;cout<<"***请输入四个不同的0~9间整数且首位不要为0***"<<endl;cout<<"**************Such as: 9876 Enter***********"<<endl;int randomNum[4],temp[10],randomSum,n=10;srand((unsigned)time( NULL )); for(int i=0;i<=3;i++) randomNum[i]=rand() % 10; }for(int i=0;i<=9;i++) temp[i]=i;}for(int i=0;i<=3;i++) for(int j=0;j<9;j++) if(randomNum[i]==temp[j]) for(int k=j;k<9;k++) temp[k]=temp[k+1]; } } for(int i=0;i<=3;i++) randomSum=0; randomSum+=randomNum[i]; } for(int i=1;i<=3;i++) for(int j=0;j<i;j++) if(randomNum[i]==randomNum[j]) randomNum[i]=temp[(randomSum++)%6]; } } if(randomNum[0]==0) int temp; temp=randomNum[0]; randomNum[0]=randomNum[1]; randomNum[1]=temp; } guess(randomNum); }void guess( int randomNum[])int input,a=0,b=0;int inputArray[4];cin>>input; for(int i=3;i>=0;i--) inputArray[i]=input%10; input/=10;}for(int i=0;i<=3;i++) if(inputArray[i]==randomNum[i]) a++;}for(int i=0;i<=3;i++) for(int j=0;j<=3;j++) if(inputArray[i]==randomNum[j]) b++; } if(a==4) cout<<"succeed!"<<endl; exit(0); } else cout<<a<<"A"<<b-a<<"B"<<endl; n++; if(n==10) cout<<"还是看答案吧,呵呵~~"<<endl; for(int i=0;i<=3;i++) cout<<randomNum[i]; cout<<endl; exit(0); } else guess(randomNum); } }}
10,Java数独游戏代码
public class ShuDu {
/**存储数字的数组*/
static int[][] n = new int[9][9];
/**生成随机数字的源数组,随机数字从该数组中产生*/
static int[] num = {1,2,3,4,5,6,7,8,9};
public static void main(String[] args) {
//生成数字
for(int i = 0;i < 9;i++){
//尝试填充的数字次数
int time = 0;
//填充数字
for(int j = 0;j < 9;j++){
//产生数字
n[i][j] = generateNum(time);
//如果返回值为0,则代表卡住,退回处理
//退回处理的原则是:如果不是第一列,则先倒退到前一列,否则倒退到前一行的最后一列
if(n[i][j] == 0){
//不是第一列,则倒退一列
if(j > 0){
j-=2;
continue;
}else{//是第一列,则倒退到上一行的最后一列
i--;
j = 8;
continue;
}
}
//填充成功
if(isCorret(i,j)){
//初始化time,为下一次填充做准备
time = 0;
}else{ //继续填充
//次数增加1
time++;
//继续填充当前格
j--;
}
}
}
//输出结果
for(int i = 0;i < 9;i++){
for(int j = 0;j < 9;j++){
System.out.print(n[i][j] + " ");
}
System.out.println();
}
}
/**
* 是否满足行、列和3X3区域不重复的要求
* @param row 行号
* @param col 列号
* @return true代表符合要求
*/
public static boolean isCorret(int row,int col){
return (checkRow(row) & checkLine(col) & checkNine(row,col));
}
/**
* 检查行是否符合要求
* @param row 检查的行号
* @return true代表符合要求
*/
public static boolean checkRow(int row){
for(int j = 0;j < 8;j++){
if(n[row][j] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[row][j] == n[row][k]){
return false;
}
}
}
return true;
}
/**
* 检查列是否符合要求
* @param col 检查的列号
* @return true代表符合要求
*/
public static boolean checkLine(int col){
for(int j = 0;j < 8;j++){
if(n[j][col] == 0){
continue;
}
for(int k =j + 1;k< 9;k++){
if(n[j][col] == n[k][col]){
return false;
}
}
}
return true;
}
/**
* 检查3X3区域是否符合要求
* @param row 检查的行号
* @param col 检查的列号
* @return true代表符合要求
*/
public static boolean checkNine(int row,int col){
//获得左上角的坐标
int j = row / 3 * 3;
int k = col /3 * 3;
//循环比较
for(int i = 0;i < 8;i++){
if(n[j + i/3][k + i % 3] == 0){
continue;
}
for(int m = i+ 1;m < 9;m++){
if(n[j + i/3][k + i % 3] == n[j + m/3][k + m % 3]){
return false;
}
}
}
return true;
}
/**
* 产生1-9之间的随机数字
* 规则:生成的随机数字放置在数组8-time下标的位置,随着time的增加,已经尝试过的数字将不会在取到
* 说明:即第一次次是从所有数字中随机,第二次时从前八个数字中随机,依次类推,
* 这样既保证随机,也不会再重复取已经不符合要求的数字,提高程序的效率
* 这个规则是本算法的核心
* @param time 填充的次数,0代表第一次填充
* @return
*/
public static int generateNum(int time){
//第一次尝试时,初始化随机数字源数组
if(time == 0){
for(int i = 0;i < 9;i++){
num[i] = i + 1;
}
}
//第10次填充,表明该位置已经卡住,则返回0,由主程序处理退回
if(time == 9){
return 0;
}
//不是第一次填充
//生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字
int ranNum = (int)(Math.random() * (9 - time));
//把数字放置在数组倒数第time个位置,
int temp = num[8 - time];
num[8 - time] = num[ranNum];
num[ranNum] = temp;
//返回数字
return num[8 - time];
}
}
文章TAG:
数独原始版 Excel 能不能用函数来破解数独游戏 数独 原始