| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1899 人关注过本帖
标题:十九格填数问题
只看楼主 加入收藏
yihai0494
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-5-5
收藏
 问题点数:0 回复次数:30 
十九格填数问题

。 。 。

。 。 。 。

。 。 。 。 。

。 。 。 。

。 。 。

如上图,共有十九个位置,填入1 - 19, 使之满足:所有横的和相等, 左斜的和相等,右斜的和相等,
I'm waiting...
Thank U very MUCH

搜索更多相关主题的帖子: 位置 
2007-05-06 22:00
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
回朔搜索应该可以做,但也是很麻烦.
主要难在剪枝.我想这个题目应该和魔方的一样一定有规律的.

做1-19的全排列(估计运行时间会很长),然后排除.
LZ能不能给出个答案来.看有有没有什么规律,觉得应该不是用回朔,太麻烦了.

倚天照海花无数,流水高山心自知。
2007-05-07 09:58
love52657
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-5-4
收藏
得分:0 
正在找规律了  ~~~~~~~~~~`好难  可能不行!!!!!!!!!呵呵 不行不要怪我~

我 为 C 狂
2007-05-07 10:30
wysaijun
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-4-25
收藏
得分:0 

哪位高手帮忙啊

2007-05-07 10:37
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 


高深...
和魔方有点相似..
但难度还有大些哟....
想想~``

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-05-07 10:39
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
感觉有点不好弄   好好想一哈看看  

   好好活着,因为我们会死很久!!!
2007-05-07 10:55
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 

唉 想不出来 想拉半天 感觉用我的方法有复杂 时间复杂度也大
只知道横斜加起来得38


   好好活着,因为我们会死很久!!!
2007-05-07 15:18
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 

是否可以将这个六边形转动起来,顺时针或者逆时针转3次,每次检验横行就ok了(每次可以删选数据)......我非专业,不知拙见是否可行。
1总体检验横行。
2数据转动3次。
3每次删选减小运算。


偶是菜鸟鸟偶惧WHO?!!!!
2007-05-07 16:04
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
不管你怎么转  只要你最后满足横斜都相等就行   

   好好活着,因为我们会死很久!!!
2007-05-07 16:12
iwfy
Rank: 1
等 级:新手上路
威 望:2
帖 子:888
专家分:0
注 册:2007-2-23
收藏
得分:0 

修复了一点错误,头一次没考虑最后一行是多个数时中间的斜行没有判断 正解是:
3 17 18
19 7 1 11
16 2 5 6 9
12 4 8 14
10 13 15
#include "stdio.h"
#define HE 38
int k[19]={0}, s[5][9]={0}; //k[]代表1-19有没有被占用
int test(int a) //从第三行开始就要检查斜行是否符合38
{
int i, j, sum1=0, sum2=0, sum3=0, ia, ja, hs;
hs = a;
for(i=a-2, j=10-a; a > -1; a--) //(a-2)此题中2是中间一行 (10-a)最右边数的位置
{
sum1 += s[a][i++];
sum2 += s[a][j--];
}
if(hs == 4) //到最后一行且最后一行包含2个以上的数字
{
i = hs;
for(i = hs; i<(10-hs); i += 2)
{
sum2 = 0;
sum3 = 0;
ja = ia = i;
for(a = hs; a > -1; a--)
{
sum2 += s[a][ia++];
sum3 += s[a][ja--];
}
if(sum2 != HE || sum3 != HE)
{
sum2 = 0;
break;
}
}
}
if(sum1 == HE)
{
if(sum2 == HE)
return 1; //是1表示成功
else
return 2; //返回2表示左斜边是38
}
else
return 0; //0表示不成功
}

int js(int a, int b, int sum) //a行坐标 b列坐标 sun表示进入此前的行各数之和
{
int i = 0, n, m = 0; //
while(m != 1) //m表示本次找的数不行再找另一个
{
while(k[i] == 1) //找到没被用过的数字
{
if(i > 17)
return 0;
else
i++;
}
n = i + sum + 1;
if(n > HE)
return 0; //返回0表示此行组的数不符合
else
{
k[i] = 1; //如果找到的数符合就做上标记表示被用
s[a][b] = i + 1;
}
if(a==0 || a==4) //
{
if(b < 6)
{
if(b==4 && n>18)
m = js(a, b+2, n);
else if(b==2 && n>2)
m = js(a, b+2, n);
}
else
{
if(a == 0)
{
if(n == HE)
{
m = js(a+1, 1, 0);
}
}
else
{
if(n == HE)
{
m = test(4); //最终检查
}
}
}
}
else if(a==1 || a==3)
{
if(b < 7)
{
if(a == 3 && b == 1) //判断左斜边是否38
{
if(test(3)==2)
m = js(a, b+2, n);
}
else
m = js(a, b+2, n);
}
else
{
if(a == 1)
{
if(n == HE)
m = js(a+1, 0, 0);
}
else
{
if(n == HE)
{
if(test(3) == 1)
m = js(a+1, 2, 0);
}
}
}
}
else //当到中间一行,第三行,a=2 b=0
{
if(b < 8)
{
if(0 == b) //判断左斜边是否38
{
if(test(2) == 2)
m = js(2, 2, 0);
}
else
{
m = js(2, b+2, n);
}
}
else
{
if(n = HE)
if(test(2) == 1)
m = js(3, 1, 0);
}
}
if(m != 1) //函数返回0表示下一个数没找到,此数需要重新找
{
k[i] = 0;
if(i < 18)
{
i++;
}
else
return 0;
}
}
return m;
}
int main()
{
int i, j, n, m, temp;
temp = js(0, 2, 0);
if(temp == 1)
printf("ok\n");
else
printf("flase\n");
for(i=0; i<5; i++)
{
if((i==0 || i==4))
{
j = 2;
m = 7;
printf(" ");
}
else if((i==1 || i==3))
{
j = 1;
m = 8;
printf(" ");
}
else
{
j = 0;
m = 9;
}
for(n=j; n<m; n+=2)
{
if(s[i][n] > 9)
printf("%d ", s[i][n]);
else
printf(" %d ", s[i][n]);
}
printf("\n");
}
return 0;
}

[此贴子已经被作者于2007-5-8 1:48:30编辑过]


英语不好还想学编程??逆天之路,不由分说!! 数学太差还想学编程??离经叛道,义无返顾!!
2007-05-07 23:37
快速回复:十九格填数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099596 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved