找回密码
 欢迎注册
楼主: dlpg070

[求助] 残缺的幻方填空谜题

[复制链接]
发表于 2020-2-12 19:05:43 | 显示全部楼层
dlpg070 发表于 2020-2-12 13:50
挑战题又来了
  1个已知仅仅3数的例子,求4x4普通幻方
  多解,有点多,很有趣,有挑战性

条件太少了,还是旁边的小朋友做的。
要不来点提示,a23+a32,a23-a32 都行。

+----+----+----+----+      
|  1  |  4  | 13 | 16 |      
+----+----+----+----+      
| 14 | 15 |  2  |  3  |      
+----+----+----+----+      
| 8  |  5  |  12 |  9  |     
+----+----+----+----+      
| 11 | 10 |  7  |  6  |    |   
+----+----+----+----+   

点评

原33#  发表于 2020-2-21 11:14
不错,很快,不全,25分,再接再厉  发表于 2020-2-12 21:48
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-13 10:56:49 | 显示全部楼层
王守恩 发表于 2020-2-12 19:05
条件太少了,还是旁边的小朋友做的。
要不来点提示,a23+a32,a23-a32 都行。

再来 1 个,还是旁边的小朋友做的。

+----+----+----+----+      
|  1  |  14  | 8 |  11 |      
+----+----+----+----+      
|  4  |  15 |  5  | 10 |      
+----+----+----+----+      
| 13  |  2  | 12 |  7  |     
+----+----+----+----+      
| 16  |  3  |  9  |  6  |      
+----+----+----+----+

点评

继续努力,还有新得  发表于 2020-2-13 11:50
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-13 11:16:56 | 显示全部楼层
dlpg070 发表于 2020-2-12 13:50
挑战题又来了
  1个已知仅仅3数的例子,求4x4普通幻方
  多解,有点多,很有趣,有挑战性

能说下面的题是无解的吗?

+----+----+----+----+      
|      |   1  |  2  |     |      
+----+----+----+----+      
|      |      |      |     |      
+----+----+----+----+      
|      |      |      |     |     
+----+----+----+----+      
|      |      |      |     |      
+----+----+----+----+

点评

我是编程解方程计算得出结论,也可以枚举证明,不会手工证明  发表于 2020-2-13 17:09
手工如何证明?  发表于 2020-2-13 12:09
使得,无解  发表于 2020-2-13 11:34
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-13 11:28:10 | 显示全部楼层
王守恩 发表于 2020-2-12 19:05
条件太少了,还是旁边的小朋友做的。
要不来点提示,a23+a32,a23-a32 都行。

为什么33#的答案给25分?
为了强调此题有4个解,只答了1个,即1/4,按100分制,只能给25分
希望分析研判全部解,这部分较难,解越多越难

谈谈问题难度设计的考虑:
本主题原题难度很大
有6个解还没有人能手工解决
为了使讨论能逐渐深入,我设计了一系列问题,由易到难,难度逐渐加大

例如:
14#  已知8数   唯一解
22#  已知7数   唯一解
26#  已知6数   唯一解            评语:漂亮
28#  已知3数   2个解  挑战题来了 评语:好汉
31#  已知3数   4个解  挑战题又来了 评语:不错,---
     随着难度增加,王守恩越战越勇,渐入佳境
     但31#的回答有点“飘”,忘了分析多解,有点遗憾
1#   已知4数   6个解  原题 按难度排在这里,至今没人能手工求解
     
原计划高难题目:
     已知2数   32个解  知名的丢勒幻方 可能解个数(幻方底部中间为15 14)
各位网友试试看,手工或编程都可以,盼望奇迹出现.                                                      
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-13 12:02:31 | 显示全部楼层
本帖最后由 dlpg070 于 2020-2-13 21:28 编辑
王守恩 发表于 2020-2-13 11:16
能说下面的题是无解的吗?

+----+----+----+----+      


把数字改一下就有解了,而且我认为手工不可能得到全部解,想挑战吗?
恰巧是我计划的高难度题目(15 14 所在行不同)

+----+----+----+----+      
|    | 15 | 14 |    |      
+----+----+----+----+      
|    |    |    |    |      
+----+----+----+----+      
|    |    |    |    |      
+----+----+----+----+      
|    |    |    |    |      
+----+----+----+----+

点评

原37#  发表于 2020-2-21 11:18
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-13 14:37:37 | 显示全部楼层
本帖最后由 王守恩 于 2020-2-13 15:25 编辑
dlpg070 发表于 2020-2-13 12:02
把数字改一下就有解了,而且我认为手工不可能得到全部解,想挑战吗?

+----+----+----+----+      
...

+-----+-----+------+-----+      
| a11 |  15  |  14  | a14 |      
+-----+-----+------+-----+      
| a21 | a22 | a23 | a24 |      
+-----+-----+-----+------+      
| a31 | a32 | a33 | a34 |     
+-----+-----+-----+------+      
| a41 | a42 | a43 | a44 |      
+-----+-----+-----+------+
a11可以有 1, 2, 3, 4, 四种填法。
一,a11=1时,有5种可能。
1,(a21,a31,a41)+(a22,a33,a44)=(5,12,16)+(09,11,13)
2,(a21,a31,a41)+(a22,a33,a44)=(6,11,16)+(08,12,13)
3,(a21,a31,a41)+(a22,a33,a44)=(7,10,16)+(08,12,13)
4,(a21,a31,a41)+(a22,a33,a44)=(7,10,16)+(09,11,13)
5,(a21,a31,a41)+(a22,a33,a44)=(8,09,16)+(10,11,12)
二,a11=2时,有8种可能。
1,(a21,a31,a41)+(a22,a33,a44)=(4,12,16)+(8,11,13)
2,(a21,a31,a41)+(a22,a33,a44)=(4,12,16)+(9,10,13)
3,(a21,a31,a41)+(a22,a33,a44)=(5,11,16)+(7,12,13)
4,(a21,a31,a41)+(a22,a33,a44)=(5,11,16)+(9,10,13)
5,(a21,a31,a41)+(a22,a33,a44)=(6,10,16)+(7,12,13)
6,(a21,a31,a41)+(a22,a33,a44)=(6,10,16)+(8,11,13)
7,(a21,a31,a41)+(a22,a33,a44)=(6,10,16)+(9,11,12)
8,(a21,a31,a41)+(a22,a33,a44)=(7,09,16)+(8,11,13)
三,a11=3 即 a14=2时,有8种可能。
1,(a24,a34,a44)+(a23,a32,a41)=(4,12,16)+(8,11,13)
2,(a24,a34,a44)+(a23,a32,a41)=(4,12,16)+(9,10,13)
3,(a24,a34,a44)+(a23,a32,a41)=(5,11,16)+(7,12,13)
4,(a24,a34,a44)+(a23,a32,a41)=(5,11,16)+(9,10,13)
5,(a24,a34,a44)+(a23,a32,a41)=(6,10,16)+(7,12,13)
6,(a24,a34,a44)+(a23,a32,a41)=(6,10,16)+(8,11,13)
7,(a24,a34,a44)+(a23,a32,a41)=(6,10,16)+(9,11,12)
8,(a24,a34,a44)+(a23,a32,a41)=(7,09,16)+(8,11,13)
四,a11=4 即 a14=1时,有5种可能。
1,(a24,a34,a44)+(a23,a32,a41)=(5,12,16)+(09,11,13)
2,(a24,a34,a44)+(a23,a32,a41)=(6,11,16)+(08,12,13)
3,(a24,a34,a44)+(a23,a32,a41)=(7,10,16)+(08,12,13)
4,(a24,a34,a44)+(a23,a32,a41)=(7,10,16)+(09,11,13)
5,(a24,a34,a44)+(a23,a32,a41)=(8,09,16)+(10,11,12)

点评

加油!胜利在前面.  发表于 2020-2-13 15:50
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-14 15:03:29 | 显示全部楼层
本帖最后由 王守恩 于 2020-2-14 15:04 编辑
王守恩 发表于 2020-2-13 14:37
+-----+-----+------+-----+      
| a11 |  15  |  14  | a14 |      
+-----+-----+------+-----+    ...


+-----+-----+------+-----+      
| a11 |  15  |  14  | a14 |      
+-----+-----+------+-----+      
| a21 | a22 | a23 | a24 |      
+-----+-----+-----+------+      
| a31 | a32 | a33 | a34 |     
+-----+-----+-----+------+      
| a41 | a42 | a43 | a44 |      
+-----+-----+-----+------+
a11可以有 1, 2, 3, 4(同时4,3,2,1只能填在a14) 四种填法。
1, 2, 3, 4填好后,1,4对应的2,3、2,3对应的1,4 只能填在a42,a43(其他位置无法填),
a42,a43填2,3、1,4后,a41,a44只能填13,16,
a22可能填5,6,7,8,9,10,11,12八种可能
共计4×2×2×8=128种可能。对这128种可能逐一试填,结果如下。
01,1+4+2+3+16+13+08+09+12+05+10+07+06+11
02,1+4+2+3+16+13+08+09+12+05+11+06+07+10
03,1+4+2+3+16+13+09+08+11+06+07+10+05+12
04,1+4+2+3+16+13+09+08+11+06+12+05+10+07
05,1+4+2+3+16+13+11+06+09+08+05+12+07+10
06,1+4+2+3+16+13+11+06+09+08+10+07+12+05
07,1+4+2+3+16+13+12+05+08+09+06+11+10+07
08,1+4+2+3+16+13+12+05+08+09+07+10+11+06
09,1+4+3+2+13+16+06+10+11+07+12+08+05+09
10,1+4+3+2+13+16+10+06+07+11+08+12+09+05
11,2+3+1+4+16+13+08+10+11+05+09+07+06+12
12,2+3+1+4+16+13+10+08+09+07+05+11+06+12
13,2+3+1+4+16+13+10+08+09+07+12+06+11+05
14,2+3+1+4+16+13+12+06+07+09+05+11+10+08
15,2+3+4+1+13+16+05+10+11+08+12+07+06+09
16,2+3+4+1+13+16+09+06+07+12+08+11+10+05
17,3+2+1+4+13+16+06+12+09+07+10+08+05+11
18,3+2+1+4+13+16+08+10+07+09+06+12+05+11
19,3+2+1+4+13+16+08+10+07+09+12+06+11+05
20,3+2+1+4+13+16+10+08+05+11+06+12+09+07
21,3+2+4+1+16+13+06+09+12+07+10+05+08+11
22,3+2+4+1+16+13+10+05+08+11+06+09+12+07
23,4+1+2+3+13+16+05+12+09+08+10+07+06+11
24,4+1+2+3+13+16+05+12+09+08+11+06+07+10
25,4+1+2+3+13+16+06+11+08+09+07+10+05+12
26,4+1+2+3+13+16+06+11+08+09+12+05+10+07
27,4+1+2+3+13+16+08+09+06+11+05+12+07+10
28,4+1+2+3+13+16+08+09+06+11+07+10+05+12
29,4+1+2+3+13+16+09+08+05+12+06+11+10+07
30,4+1+2+3+13+16+09+08+05+12+07+10+11+06
31,4+1+3+2+16+13+06+10+11+07+09+05+08+12
32,4+1+3+2+16+13+10+06+07+11+05+09+12+08
上述14个数表示
a11+a14+a42+a43+a41+a44+a22+a32+a33+a23+a21+a31+a34+a24

点评

天才,几百年前的数学家大概就是这么研究幻方的吧  发表于 2020-2-14 15:22
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-14 15:55:04 | 显示全部楼层
本帖最后由 dlpg070 于 2020-2-14 16:19 编辑
王守恩 发表于 2020-2-14 15:03
+-----+-----+------+-----+      
| a11 |  15  |  14  | a14 |      
+-----+-----+------+-----+  ...




最近发现chyanog的解4阶幻方的c++代码,简单快速,适于解本主题各例题
我增加菜单,改变输入输出,把结果保存到文件,
解一道题仅需 0.2 秒(包括输出到文件)
解全部8个例题(包括全部7040解),用时不到2秒
代码如下,供参考
  1. // chyanog.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. //      
  3. // 四阶幻方全生成问题 - 第2页 - 算法交流 - 数学研发论坛
  4. // https://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=224&extra=&highlight=%CB%C4%BD%D7%BB%C3%B7%BD&page=2
  5. #include "pch.h"
  6. #include <iostream>
  7. #include <stdio.h>
  8. #include <conio.h>
  9. #include <stdlib.h>

  10. #include <time.h>

  11. int main()
  12. {
  13.         int select, ret;
  14.         char buf[80];
  15.         char str[128];
  16.         FILE *fp;
  17.         errno_t err;
  18.         err = fopen_s(&fp,"outch.txt", "wb");
  19.         sprintf_s(str, "已知0---16个数字求全部4x4幻方,多个实例\n");
  20.         fwrite(str, 1, strlen(str), fp);
  21.         fflush(fp);
  22.         ret = 0;
  23.         while (ret == 0)
  24.         {
  25.                 printf("\n     已知0---16个数字求全部4x4幻方\n\n");

  26.                 printf("\n==================\n主菜单\n================\n\n");


  27.                 printf("1. 14#  已知8数\n");
  28.                 printf("2. 22#  已知7数\n");
  29.                 printf("3. 26#  已知6数\n");
  30.                 printf("4. 28#  已知3数  挑战题来了\n");
  31.                 printf("5. 31#  已知3数  挑战题又来了\n");

  32.                 printf("6. 1#   已知4数  原题 \n");
  33.                 printf("7. 37#  已知2数(15 14)  高难度 \n");
  34.                 printf("8.      已知0数  全部解7040 \n");
  35.                 printf("0 或q 退出\n\n");
  36.                 printf(" 请输入您的选择:  ");
  37.                 gets_s(buf);
  38.                 select = atoi(buf);
  39.                 printf("\n");


  40.                 if (select==99 || select == 0)
  41.                 {
  42.                         fclose(fp);
  43.                         return 1;
  44.                 }
  45.                 sprintf_s(str, "\n=======\nselect= %d\n", select);
  46.                 fwrite(str, 1, strlen(str), fp);

  47.                 clock_t t0 = clock();
  48.                 int a11,a12,a13,a14;
  49.                 int a21,a22,a23,a24;
  50.                 int a31,a32,a33,a34;
  51.                 int a41,a42,a43,a44;
  52.                
  53.                 int i1, i2, i3, i4, i5, i6, i7;
  54.                 int cnt = 0;
  55.                 for (i1 = 1; i1 <= 16; i1++)
  56.                 {
  57.                         for (i2 = 1; i2 <= 16; i2++)
  58.                         {
  59.                                 if (i2 == i1) continue;
  60.                                 for (i3 = 1; i3 <= 16; i3++)
  61.                                 {
  62.                                         if (i1 + i2 + i3 > 33 || i1 + i2 + i3 < 18 || i1 == i3 || i2 == i3 || 2 * i1 + i2 + i3 == 34 || i1 + 2 * i2 + i3 == 34 || i1 + i2 + 2 * i3 == 34) continue;
  63.                                         for (i4 = 1; i4 <= 16; i4++)
  64.                                         {
  65.                                                 if (i1 == i4 || i2 == i4 || i3 == i4 || i1 + i2 + i3 + i4 == 34) continue;
  66.                                                 for (i5 = 1; i5 <= 16; i5++)
  67.                                                 {
  68.                                                         if (i1 == i5 || i2 == i5 || i3 == i5 || i4 == i5 || i1 + i2 + i3 + i5 == 34 || 2 * i1 + 2 * i2 + i3 + i4 + 2 * i5 == 68) continue;
  69.                                                         for (i6 = 1; i6 <= 16; i6++)
  70.                                                         {
  71.                                                                 if (i4 + i5 + i6 > 33 || i4 + i5 + i6 < 18 || i1 == i6 || i2 == i6 || i3 == i6 || i4 == i6 || i5 == i6 || i1 + i2 + i3 + i6 == 34 || i1 + i2 + i3 == i4 + i5 + i6 || i3 + i4 + i5 + i6 == 34 || i1 + i4 + i5 + i6 == 34 || i2 + i4 + i5 + i6 == 34 || 2 * i1 + i2 + i3 + i4 == 34 + i6 || i1 + i5 == i3 + i6 || i1 + 2 * i2 + i3 + i5 == 34 + i6 || 2 * i1 + i2 + i4 + i5 == 34 + i6 || 2 * i4 + i5 + i6 == 34 || i4 + 2 * i5 + i6 == 34 || i4 + i5 + 2 * i6 == 34 || 2 * i1 + i2 + i3 + i4 + 2 * i5 + i6 == 68) continue;
  72.                                                                 for (i7 = 1; i7 <= 16; i7++)
  73.                                                                 {
  74.                                                                         if (2 * i1 + i2 + i4 + i5 + i7 > 50 + i6 || 35 + i6 > 2 * i1 + i2 + i4 + i5 + i7 || 2 * i1 + 2 * i2 + i3 + i4 + i5 + i7 > 67 + i6 || 52 + i6 > 2 * i1 + 2 * i2 + i3 + i4 + i5 + i7 || 2 * i1 + i2 + i3 + i4 + i7 > 50 + i6 || 35 + i6 > 2 * i1 + i2 + i3 + i4 + i7 || 2 * i1 + i2 + i3 + i4 + i5 + i7 < 52 || 2 * i1 + i2 + i3 + i4 + i5 + i7 > 67 || i1 + i2 + i3 + i4 + i7 < 35 || i1 + i2 + i3 + i4 + i7 > 50 || i1 + i4 + i7 < 18 || i1 + i4 + i7 > 33 || 1 + i7 > i5 + i6 || i5 + i6 > 16 + i7 || i4 + i5 + i6 + i7 == 34 || i1 + i2 + i3 + i7 == 34 || i6 == i7 || i5 == i7 || i4 == i7 || i3 == i7 || i2 == i7 || i1 == i7 || i1 + i4 + i6 + i7 == 34 || i2 + i3 == i4 + i7 || i2 + i3 + i4 + i7 == 34 || i3 + i7 == i5 + i6 || i2 + i7 == i5 + i6 || i1 + i7 == i5 + i6 || i1 + i2 + i3 + i5 + i6 == 34 + i7 || i1 + i3 + i4 + i7 == 34 || i1 + i2 + i4 + i7 == 34 || i1 + i4 + i5 + i7 == 34 || i1 + i2 + i3 + i4 + i7 == 34 + i5 || i4 + i7 == i5 + i6 || i4 + 2 * (i5 + i6) == 34 + i7 || i1 + i2 + i3 + 2 * i4 + i5 + i6 + i7 == 68 || 2 * i1 + i2 + i3 + i4 + i5 + i6 + i7 == 68 || i1 + i2 + i3 + i4 + i7 == 34 + i6 || 2 * i1 + i2 + i3 + i7 == 34 + i6 || 2 * i1 + i2 + 2 * i3 + i4 + i5 + i7 == 68 || i1 + 2 * i4 + i7 == 34 || 2 * i1 + 2 * i2 + i3 + i4 + i5 + i7 == 68 || i1 + i2 + i4 + i5 + i7 == 34 + i6 || 2 * i1 + i2 + i3 + i4 + i5 + 2 * i7 == 68 || 2 * i1 + i4 + i7 == 34 || i1 + i4 + 2 * i7 == 34 || 2 * i1 + 2 * i2 + 2 * i3 + i4 + i7 == 68 || 2 * i1 + i2 + i3 + i4 + i7 == 34 + i5 + i6 || 2 * i1 + i3 + i4 + i7 == 34 + i6 || 2 * i1 + i2 + i3 + 2 * i4 + i5 + i7 == 68 || 2 * i1 + i2 + i4 + i7 == 34 + i6 || i5 + i6 == 2 * i7 || 2 * i1 + i2 + i3 + i4 + 2 * i5 + i7 == 68 || 2 * i1 + i2 + i5 + i7 == 34 + i6 || i1 + i2 + i3 + i4 + 2 * i7 == 34 + i5 + i6 || 2 * i1 + 2 * i2 + 2 * i3 + i4 + i5 + i7 == 68 + i6 || 2 * i1 + 2 * i2 + i3 + i7 == 34 + 2 * i6 || 2 * i1 + i2 + 2 * i4 + 2 * i5 + i7 == 68 || 2 * i1 + i4 + i5 + i7 == 34 + i6 || 3 * i1 + i2 + i3 + i4 + i5 + i7 == 68 || 2 * i1 + i2 + i3 + i4 + 2 * i7 == 34 + i5 + 2 * i6 || 2 * i1 + 2 * i2 + i3 + i4 + i5 + 2 * i7 == 68 + i6 || 3 * i1 + 2 * i2 + 2 * i3 + i4 + i7 == 68 + i6 || 2 * i1 + 2 * i2 + i3 + 2 * i4 + i5 + i7 == 68 + i6 || 2 * i1 + 3 * i2 + i3 + i4 + i5 + i7 == 68 + i6 || 2 * i1 + i2 + i3 + i4 + i7 == 34 + 2 * i6 || 2 * i1 + i2 + i4 + i5 + i7 == 34 + i3 + i6 || 2 * i1 + i2 + i3 + 2 * i4 + 2 * i7 == 68 || 2 * i1 + 2 * i2 + i3 + i4 + 2 * i5 + i7 == 68 + i6 || 3 * i1 + 2 * i2 + i3 + i4 + i5 + i7 == 68 + i6 || 2 * i1 + i2 + i4 + 2 * i7 == 34 + 2 * i6 || 3 * i1 + 2 * i2 + 2 * i3 + 2 * i4 + i5 + 2 * i7 == 102 || 2 * i1 + i2 + i4 + i5 + i7 == 34 + 2 * i6 || 3 * i1 + i2 + i3 + 2 * i4 + 2 * i7 == 68 + i6 || 3 * i1 + 3 * i2 + 2 * i3 + 2 * i4 + i5 + 2 * i7 == 102 + i6 || 3 * i1 + i2 + 2 * i4 + i5 + 2 * i7 == 68 + i6 || 4 * i1 + 2 * i2 + i3 + 2 * i4 + 2 * i5 + 2 * i7 == 102 + i6 || 4 * i1 + 2 * i2 + 2 * i3 + 2 * i4 + i5 + 2 * i7 == 102 + i6 || 4 * i1 + 3 * i2 + 2 * i3 + 2 * i4 + i5 + 2 * i7 == 2 * (51 + i6) || 4 * i1 + 3 * i2 + i3 + 2 * i4 + 2 * i5 + 2 * i7 == 2 * (51 + i6)) continue;
  75.                                                                        
  76.                                                                        
  77.                                     a11=i1;a12= i2;a13= i3;a14= 34 - i1 - i2 - i3;
  78.                                     a21=i4; a22=i5;a23= i6;a24= 34 - i4 - i5 - i6;
  79.                                     a31=i7;a32= -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7;
  80.                                     a33= 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7;a34= i5 + i6 - i7;
  81.                                     a41= 34 - i1 - i4 - i7;a42= 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7;
  82.                                     a43= -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7;
  83.                                     a44= -34 + i1 + i2 + i3 + i4 + i7;
  84.                                                     switch (select)
  85.                                                     {
  86.                                                     case 1://"1. 14#  已知8数
  87.                                                                                 if (a21==5&&a22==10&&a23==11&&a24==8&&a41==14&&a42==4&&a43==1&&a44==15)
  88.                                                                                 {
  89.                                                                                         cnt++;
  90.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  91.                                                                                         fwrite(str, 1, strlen(str), fp);
  92.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  93.                                                                                         fwrite(str, 1, strlen(str), fp);
  94.                                                                                 }
  95.                                                                                 break;
  96.                                                                         case 2://2. 22#  已知7数
  97.                                                                                 if (a11 == 16 && a12 == 15 && a13 == 2 && a21 == 5 && a22 == 3 && a23 == 14 && a31 == 4)
  98.                                                                                 {
  99.                                                                                         cnt++;
  100.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  101.                                                                                         fwrite(str, 1, strlen(str), fp);
  102.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  103.                                                                                         fwrite(str, 1, strlen(str), fp);
  104.                                                                                 }
  105.                                                                                 break;

  106.                                           case 3://3. 26#  已知6数
  107.                                                                                 if (a11 == 10 && a12 == 12 && a21 == 1 && a22 == 13 && a34 == 14 && a43 == 11 )
  108.                                                                                 {
  109.                                                                                         cnt++;
  110.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  111.                                                                                         fwrite(str, 1, strlen(str), fp);
  112.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  113.                                                                                         fwrite(str, 1, strlen(str), fp);
  114.                                                                                 }
  115.                                                                                 break;
  116.                                           case 4://4. 28#  已知3数  挑战题来了
  117.                                                                                 if (a11 == 16 && a12 == 14 && a21 == 2)
  118.                                                                                 {
  119.                                                                                         cnt++;
  120.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  121.                                                                                         fwrite(str, 1, strlen(str), fp);
  122.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  123.                                                                                         fwrite(str, 1, strlen(str), fp);
  124.                                                                                 }
  125.                                                                                 break;
  126.                                           case 5: // 5. 31#  已知3数  挑战题又来了
  127.                                                                                 if (a11 == 1 && a22 == 15 && a33 == 12)
  128.                                                                                 {
  129.                                                                                         cnt++;
  130.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  131.                                                                                         fwrite(str, 1, strlen(str), fp);
  132.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  133.                                                                                         fwrite(str, 1, strlen(str), fp);
  134.                                                                                 }
  135.                                                                                 break;
  136.                                           case 6:// 6. 1#   已知4数  原题
  137.                                                                                 if (a21 == 5 && a22 == 10 && a23 == 11 && a24 == 8 )
  138.                                                                                 {
  139.                                                                                         cnt++;
  140.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  141.                                                                                         fwrite(str, 1, strlen(str), fp);
  142.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  143.                                                                                         fwrite(str, 1, strlen(str), fp);
  144.                                                                                 }
  145.                                                                                 break;
  146.                                           case 7:// 7. 32#  已知2数(15 14)  高难度
  147.                                                                                 if (a12 == 15 && a13 == 14)
  148.                                                                                 {
  149.                                                                                         cnt++;
  150.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  151.                                                                                         fwrite(str, 1, strlen(str), fp);
  152.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  153.                                                                                         fwrite(str, 1, strlen(str), fp);
  154.                                                                                 }
  155.                                                                                 break;
  156.                                           case 8:// 8.      已知0数  全部解7040
  157.                                                                                 if (1)
  158.                                                                                 {
  159.                                                                                         cnt++;
  160.                                                                                         sprintf_s(str, "%5d:%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", cnt, i1, i2, i3, 34 - i1 - i2 - i3, i4, i5, i6, 34 - i4 - i5 - i6, i7, -34 + 2 * i1 + i2 + i3 + i4 - i6 + i7, 68 - 2 * i1 - i2 - i3 - i4 - i5 - i7, i5 + i6 - i7, 34 - i1 - i4 - i7, 68 - 2 * i1 - 2 * i2 - i3 - i4 - i5 + i6 - i7, -34 + 2 * i1 + i2 + i4 + i5 - i6 + i7, -34 + i1 + i2 + i3 + i4 + i7);
  161.                                                                                         fwrite(str, 1, strlen(str), fp);
  162.                                                                                         sprintf_s(str, "%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n%2d,%2d,%2d,%2d\n", a11, a12, a13, a14, a21, a22, a23, a24, a31, a32, a33, a34, a41, a42, a43, a44);
  163.                                                                                         fwrite(str, 1, strlen(str), fp);
  164.                                                                                 }
  165.                                                                                 break;

  166.                                          }// switch
  167.                                                                        
  168.                                                                         fflush(fp);
  169.                                                                 }
  170.                                                         }
  171.                                                 }
  172.                                         }
  173.                                 }
  174.                         }
  175.                 }

  176.                 printf("%d\n", cnt);
  177.                 printf("Elapsed time %0.2f\n", (clock() - t0) / 1000.0);

  178.                 sprintf_s(str, "cnt= %d\n", cnt);
  179.                 fwrite(str, 1, strlen(str), fp);
  180.                 sprintf_s(str, "Elapsed time: %0.2f\n", (clock() - t0) / 1000.0);
  181.                 fwrite(str, 1, strlen(str), fp);
  182.                 fflush(fp);

  183.         }
  184.         fclose(fp);
  185.         return 0;
  186. }

复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-14 16:01:41 | 显示全部楼层
本帖最后由 dlpg070 于 2020-2-14 16:22 编辑
dlpg070 发表于 2020-2-14 15:55
最近发现chyanog的解4阶幻方的c++代码,简单快速,适于解本主题各例题
我增加菜单,改变输入输出, ...



输出的例子

已知0---16个数字求全部4x4幻方,多个实例

=======
select= 7  // 37#  已知2数(15 14)  高难度
    1:1,15,14,4,5,11,8,10,12,6,9,7,16,2,3,13
1,15,14, 4
5,11, 8,10
12, 6, 9, 7
16, 2, 3,13
    2:1,15,14,4,6,12,9,7,11,5,8,10,16,2,3,13
1,15,14, 4
6,12, 9, 7
11, 5, 8,10
16, 2, 3,13
    3:1,15,14,4,7,9,6,12,10,8,11,5,16,2,3,13
1,15,14, 4
7, 9, 6,12
10, 8,11, 5
16, 2, 3,13
    4:1,15,14,4,7,12,9,6,10,5,8,11,16,2,3,13
1,15,14, 4
7,12, 9, 6
10, 5, 8,11
16, 2, 3,13
    5:1,15,14,4,8,10,11,5,12,6,7,9,13,3,2,16
1,15,14, 4
8,10,11, 5
12, 6, 7, 9
13, 3, 2,16
    6:1,15,14,4,10,8,5,11,7,9,12,6,16,2,3,13
1,15,14, 4
10, 8, 5,11
7, 9,12, 6
16, 2, 3,13
    7:1,15,14,4,10,11,8,5,7,6,9,12,16,2,3,13
1,15,14, 4
10,11, 8, 5
7, 6, 9,12
16, 2, 3,13
    8:1,15,14,4,11,8,5,10,6,9,12,7,16,2,3,13
1,15,14, 4
11, 8, 5,10
6, 9,12, 7
16, 2, 3,13
    9:1,15,14,4,12,6,7,9,8,10,11,5,13,3,2,16
1,15,14, 4
12, 6, 7, 9
8,10,11, 5
13, 3, 2,16
   10:1,15,14,4,12,9,6,7,5,8,11,10,16,2,3,13
1,15,14, 4
12, 9, 6, 7
5, 8,11,10
16, 2, 3,13
   11:2,15,14,3,5,10,7,12,11,8,9,6,16,1,4,13
2,15,14, 3
5,10, 7,12
11, 8, 9, 6
16, 1, 4,13
   12:2,15,14,3,5,12,9,8,11,6,7,10,16,1,4,13
2,15,14, 3
5,12, 9, 8
11, 6, 7,10
16, 1, 4,13
   13:2,15,14,3,8,9,12,5,11,6,7,10,13,4,1,16
2,15,14, 3
8, 9,12, 5
11, 6, 7,10
13, 4, 1,16
   14:2,15,14,3,9,8,5,12,7,10,11,6,16,1,4,13
2,15,14, 3
9, 8, 5,12
7,10,11, 6
16, 1, 4,13
   15:2,15,14,3,11,10,7,6,5,8,9,12,16,1,4,13
2,15,14, 3
11,10, 7, 6
5, 8, 9,12
16, 1, 4,13
   16:2,15,14,3,12,5,8,9,7,10,11,6,13,4,1,16
2,15,14, 3
12, 5, 8, 9
7,10,11, 6
13, 4, 1,16
   17:3,15,14,2,6,8,9,11,12,10,7,5,13,1,4,16
3,15,14, 2
6, 8, 9,11
12,10, 7, 5
13, 1, 4,16
   18:3,15,14,2,6,10,11,7,9,5,8,12,16,4,1,13
3,15,14, 2
6,10,11, 7
9, 5, 8,12
16, 4, 1,13
   19:3,15,14,2,6,10,11,7,12,8,5,9,13,1,4,16
3,15,14, 2
6,10,11, 7
12, 8, 5, 9
13, 1, 4,16
   20:3,15,14,2,10,6,7,11,5,9,12,8,16,4,1,13
3,15,14, 2
10, 6, 7,11
5, 9,12, 8
16, 4, 1,13
   21:3,15,14,2,10,6,7,11,8,12,9,5,13,1,4,16
3,15,14, 2
10, 6, 7,11
8,12, 9, 5
13, 1, 4,16
   22:3,15,14,2,12,8,9,5,6,10,7,11,13,1,4,16
3,15,14, 2
12, 8, 9, 5
6,10, 7,11
13, 1, 4,16
   23:4,15,14,1,5,8,11,10,12,9,6,7,13,2,3,16
4,15,14, 1
5, 8,11,10
12, 9, 6, 7
13, 2, 3,16
   24:4,15,14,1,5,10,11,8,9,6,7,12,16,3,2,13
4,15,14, 1
5,10,11, 8
9, 6, 7,12
16, 3, 2,13
   25:4,15,14,1,6,9,12,7,11,8,5,10,13,2,3,16
4,15,14, 1
6, 9,12, 7
11, 8, 5,10
13, 2, 3,16
   26:4,15,14,1,7,6,9,12,10,11,8,5,13,2,3,16
4,15,14, 1
7, 6, 9,12
10,11, 8, 5
13, 2, 3,16
   27:4,15,14,1,7,9,12,6,10,8,5,11,13,2,3,16
4,15,14, 1
7, 9,12, 6
10, 8, 5,11
13, 2, 3,16
   28:4,15,14,1,9,6,7,12,5,10,11,8,16,3,2,13
4,15,14, 1
9, 6, 7,12
5,10,11, 8
16, 3, 2,13
   29:4,15,14,1,10,5,8,11,7,12,9,6,13,2,3,16
4,15,14, 1
10, 5, 8,11
7,12, 9, 6
13, 2, 3,16
   30:4,15,14,1,10,8,11,5,7,9,6,12,13,2,3,16
4,15,14, 1
10, 8,11, 5
7, 9, 6,12
13, 2, 3,16
   31:4,15,14,1,11,5,8,10,6,12,9,7,13,2,3,16
4,15,14, 1
11, 5, 8,10
6,12, 9, 7
13, 2, 3,16
   32:4,15,14,1,12,6,9,7,5,11,8,10,13,2,3,16
4,15,14, 1
12, 6, 9, 7
5,11, 8,10
13, 2, 3,16
cnt= 32
Elapsed time: 0.21

点评

1#的填法这里有2个:24,28,再延伸一下。  发表于 2020-2-15 19:16
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-15 08:26:28 | 显示全部楼层
本帖最后由 王守恩 于 2020-2-15 08:36 编辑
王守恩 发表于 2020-2-13 11:16
能说下面的题是无解的吗?

+----+----+----+----+      


能说下面的题是无解的吗?

+----+----+----+----+      
|      |      |      |     |      
+----+----+----+----+      
|      |  1  |   2  |     |      
+----+----+----+----+      
|      |      |      |     |     
+----+----+----+----+      
|      |      |      |     |      
+----+----+----+----+

点评

是的,无解  发表于 2020-2-15 08:47
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-3 08:26 , Processed in 0.047381 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表