如何用excel做数独???

如何用excel做数独???,第1张

1、首先,我们打开我们电脑上面的excel;

2、然后我们在单机点击文件;

3、之消闷后我们在单机点击新建;

4、然后我们在单机点击教育;

5、之后我们点击数独求解;

6、然后我们点猛郑击下载;

7、结果如图所示,这样我们就制作枝桥颂好数独求解了。

需要定义一个函数,比如这个函数局颤租名用sswrls(四舍五入留双的拼音,可以任取),打开vba,插洞侍入一个模块,桐兆复制下面的代码粘贴进去后关闭

Function sswrls(rng As Double, number As Integer) As Double

sswrls = Round(rng, number)

End Function

再回到excel,输入公式,比如 =sswrls(A1,1)

你试试

一、步骤:

1.对每一个空格,根据规则推断它可能填入的数字,并存储它的所有可能值;

2.根据可能值的个数,确定填写的顺序。比如说,有些空格只有一种可能,那必然是正确的结果,首先填入。

3.将所有只有一种可能的空格填写完毕以后,回到步骤1,重新确定剩下空格的可能值;

4.当没有只有一种可能的空格时(即每个空格都有两种以上可能),按照可能值个数从小到大的顺序,使用深度(广度)优先搜索,完成剩下空格拿帆。

二、例程:

#include <windows.h>

#include <stdio.h>

#include <悉裤time.h>

 

char sd[81]

bool isok = false

 

//显示数独

void show()

{

 if (isok) puts("求解完成")

 else puts("初始化完成")

 

 for (int i = 0 i < 81 i++)

 {

  putchar(sd[i] + '0')

  if ((i + 1) % 9 == 0) putchar('\n')

 }

 putchar('\n')

}

 

//读取数独

bool Init()

{

 FILE *fp = fopen("in.txt", "rb")

 if (fp == NULL) return false

 fread(sd, 81, 1, fp)

 fclose(fp)

 for (int i = 0 i < 消陆雹81 i++)

 {

  if (sd[i] >= '1' && sd[i] <= '9') sd[i] -= '0'

  else sd[i] = 0

 }

 show()

 return true

}

 

//递归解决数独

void force(int k)

{

 if (isok) return

 if (!sd[k])

 {

  for (int m = 1 m <= 9 m++)

  {

   bool mm = true

   for (int n = 0 n < 9 n++)

   {

    if ((m == sd[k/27*27+(k%9/3)*3+n+n/3*6]) || (m == sd[9*n+k%9]) || (m == sd[k/9*9+n]))

    {

     mm = false

     break

    }

   }

   if (mm)

   {

    sd[k] = m

    if (k == 80)

    {

     isok = true

     show()

     return

    }

    force(k + 1)

   }

  }

  sd[k] = 0

 }

 else

 {

  if (k == 80)

  {

   isok = true

   show()

   return

  }

  force(k + 1)

 }

}

 

int main()

{

 system("CLS")

 if (Init())

 {

  double start = clock()

  force(0)

  printf("耗时%.0fms", clock() - start)

 }

 else puts("初始化错误")

 getchar()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12497191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存