一道C语言题 ,急求

argenCHN 2006-06-22 08:13:41
各位兄弟姐妹,帮我解道题,急啊

用0~9 10个数不重复地填在下面图形的点上
*
* *
* * *
* * * *

使得所有的这种形状 *
* * 的三角形顶点的数值之和相等


用C语言
...全文
249 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2006-06-23
  • 打赏
  • 举报
回复
#include <stdio.h>

void process(void)
{
int n[10];

for(n[0] = 0; n[0] <= 9; n[0]++)
{
for(n[1] = 0; n[1] <= 9; n[1]++)
{
if(n[1] == n[0]) continue;
for(n[2] = 0; n[2] <= 9; n[2]++)
{
if(n[2] == n[0]) continue;
if(n[2] == n[1]) continue;
for(n[3] = 0; n[3] <= 9; n[3]++)
{
if(n[3] == n[0]) continue;
if(n[3] == n[1]) continue;
if(n[3] == n[2]) continue;
for(n[4] = 0; n[4] <= 9; n[4]++)
{
if(n[4] == n[0]) continue;
if(n[4] == n[1]) continue;
if(n[4] == n[2]) continue;
if(n[4] == n[3]) continue;
for(n[5] = 0; n[5] <= 9; n[5]++)
{
if(n[5] == n[0]) continue;
if(n[5] == n[1]) continue;
if(n[5] == n[2]) continue;
if(n[5] == n[3]) continue;
if(n[5] == n[4]) continue;
for(n[6] = 0; n[6] <= 9; n[6]++)
{
if(n[6] == n[0]) continue;
if(n[6] == n[1]) continue;
if(n[6] == n[2]) continue;
if(n[6] == n[3]) continue;
if(n[6] == n[4]) continue;
if(n[6] == n[5]) continue;
for(n[7] = 0; n[7] <= 9; n[7]++)
{
if(n[7] == n[0]) continue;
if(n[7] == n[1]) continue;
if(n[7] == n[2]) continue;
if(n[7] == n[3]) continue;
if(n[7] == n[4]) continue;
if(n[7] == n[5]) continue;
if(n[7] == n[6]) continue;
for(n[8] = 0; n[8] <= 9; n[8]++)
{
if(n[8] == n[0]) continue;
if(n[8] == n[1]) continue;
if(n[8] == n[2]) continue;
if(n[8] == n[3]) continue;
if(n[8] == n[4]) continue;
if(n[8] == n[5]) continue;
if(n[8] == n[6]) continue;
if(n[8] == n[7]) continue;
for(n[9] = 0; n[9] <= 9; n[9]++)
{
if(n[9] == n[0]) continue;
if(n[9] == n[1]) continue;
if(n[9] == n[2]) continue;
if(n[9] == n[3]) continue;
if(n[9] == n[4]) continue;
if(n[9] == n[5]) continue;
if(n[9] == n[6]) continue;
if(n[9] == n[7]) continue;
if(n[9] == n[8]) continue;

if((n[0] + n[1] + n[2]) == (n[1] + n[3] + n[4]))
{
if((n[1] + n[3] + n[4]) == (n[2] + n[4] + n[5]))
{
if((n[2] + n[4] + n[5]) == (n[3] + n[6] + n[7]))
{
if((n[3] + n[6] + n[7]) == (n[4] + n[7] + n[8]))
{
if((n[4] + n[7] + n[8]) == (n[5] + n[8] + n[9]))
{
printf("==========\n");
printf(" %d\n", n[0]);
printf(" %d %d\n", n[1], n[2]);
printf(" %d %d %d\n", n[3], n[4], n[5]);
printf(" %d %d %d %d\n", n[6], n[7], n[8], n[9]);
printf("%d\n", n[0] + n[1]+ n[2]);
printf("==========\n\n");
}
}
}
}
}

}
}
}
}
}
}
}
}
}
}
}
小弟不才,混个分。
ForestDB 2006-06-23
  • 打赏
  • 举报
回复
==========
0
5 9
6 3 2
1 7 4 8
14
==========

==========
0
9 5
2 3 6
8 4 7 1
14
==========

==========
1
5 7
2 6 0
8 3 4 9
13
==========

==========
1
6 7
5 3 4
0 9 2 8
14
==========

==========
1
7 5
0 6 2
9 4 3 8
13
==========

==========
1
7 6
4 3 5
8 2 9 0
14
==========

==========
8
2 3
5 6 4
1 7 0 9
13
==========

==========
8
2 4
9 3 7
0 5 6 1
14
==========

==========
8
3 2
4 6 5
9 0 7 1
13
==========

==========
8
4 2
7 3 9
1 6 5 0
14
==========

==========
9
0 4
7 6 3
1 5 2 8
13
==========

==========
9
4 0
3 6 7
8 2 5 1
13
==========

Press any key to continue
灰太狼 2006-06-23
  • 打赏
  • 举报
回复
太强了
chenxingyi 2006-06-23
  • 打赏
  • 举报
回复
用递归做。
argenCHN 2006-06-23
  • 打赏
  • 举报
回复
谢谢楼上几位,我已经用回搠法做出来了,

程序如下:

#include<stdio.h>

typedef struct
{
int a;
bool use;
}value;
value v[10];

int count = 0;

bool check(int *a, int i)
{
switch(i)
{
case 4:
if(a[0]+a[2] == a[3]+a[4])
return true;
break;
case 5:
if(a[0]+a[2] == a[3]+a[4] && a[0]+a[1] == a[4]+a[5] && a[1]+a[3] == a[2]+a[5])
return true;
break;
case 7:
if(a[0]+a[2] == a[3]+a[4] && a[0]+a[1] == a[4]+a[5] && a[1]+a[3] == a[2]+a[5]
&& a[1]+a[4] == a[6]+a[7])
return true;
break;
case 8:
if(a[0]+a[2] == a[3]+a[4] && a[0]+a[1] == a[4]+a[5] && a[1]+a[3] == a[2]+a[5]
&& a[1]+a[4] == a[6]+a[7] && a[1]+a[3] == a[7]+a[8] && a[2]+a[5] == a[7]+a[8])
return true;
break;
case 9:
if(a[0]+a[2] == a[3]+a[4] && a[0]+a[1] == a[4]+a[5] && a[1]+a[3] == a[2]+a[5]
&& a[1]+a[4] == a[6]+a[7] && a[1]+a[3] == a[7]+a[8] && a[2]+a[5] == a[7]+a[8]
&& a[2]+a[4] == a[8]+a[9] && a[4]+a[7] == a[5]+a[9])
{
for(int j = 0; j < 10; j++)
printf("%d ",a[j]);

printf("\n");

return true;
}
break;
default:
return false;
}
}

void Backtrack(int *a, int t)
{
int j;

count ++;
if(t <= 9)
{
for(j = 0; j < 10;j++)
{
if(v[j].use == true)
{
a[t] = v[j].a;
v[j].use = false;

if(t == 4 || t == 5 || t == 7 || t == 8 || t == 9)
{
if(check(a, t))
Backtrack(a, t+1);
}
else
Backtrack(a, t+1);

v[j].use = true;
}
}
}
}

void main()
{
int i,array[10];

for(i = 0; i < 10; i++)
{
v[i].a = i;
v[i].use = true;
}

Backtrack(array, 0);
printf("%d\n",count);
}


各位看看
tailzhou 2006-06-22
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(int argc, char* argv[])
{
int i1,i2,i3,i4,i5;
int j;
int tmp;
int num[10];
int usd[10];
int isFound;
int sum;
int tri[10][3]={{0,1,2},{1,3,4},{2,4,5},{3,6,7},{4,7,8},{5,8,9}}; //{0,3,5},{1,6,8},{2,7,9},{0,6,9}
isFound=0;

for (j=0; j<10;++j )
{
num[j]=-1;
usd[j]=0;
}

for (i1=0; i1<10; ++i1)
{
num[0]=i1;
usd[i1]=1;

for (i2=0; i2<10; ++i2)
{
if (usd[i2])
{
continue;
}
num[1]=i2;
usd[i2]=1;


for (i3=0; i3<10; ++i3)
{
if (usd[i3])
{
continue;
}
num[3]=i3;
usd[i3]=1;
for (i4=0; i4<10; ++i4)
{
if (usd[i4])
{
continue;
}
num[6]=i4;
usd[i4]=1;

for (i5=0; i5<10; ++i5)
{
if (usd[i5])
{
continue;
}
num[2]=i5;
usd[i5]=1;


sum=num[0]+num[1]+num[2];
for (j=1; j<6;++j )
{
tmp=sum-num[tri[j][0]]-num[tri[j][1]];
if (tmp<0 || tmp>9 || (usd[tmp] && tmp!=num[tri[j][2]]))
{
//printf("%d %d %d %d\n",sum,num[tri[j][0]],num[tri[j][1]],tmp);

goto nnext;
}
usd[tmp]=1;
num[tri[j][2]]=tmp;
}

printf(" %d\n",num[0]);
printf(" %d %d\n",num[1],num[2]);
printf(" %d %d %d\n",num[3],num[4],num[5]);
printf("%d %d %d %d\n",num[6],num[7],num[8],num[9]);

nnext:;
for (j=0; j<10;++j )
{
if (j!=0 && j!=1 && j!=3 && j!=6)
{
usd[num[j]]=0;
num[j]=-1;
}
}
}
num[6]=-1;
usd[i4]=0;
}

num[3]=-1;
usd[i3]=0;
}
num[1]=-1;
usd[i2]=0;
}
num[0]=-1;
usd[i1]=0;
}
return 0;
}

C:\projects>test
0
5 9
6 3 2
1 7 4 8
0
9 5
2 3 6
8 4 7 1
1
5 7
2 6 0
8 3 4 9
1
6 7
5 3 4
0 9 2 8
1
7 5
0 6 2
9 4 3 8
1
7 6
4 3 5
8 2 9 0
8
2 3
5 6 4
1 7 0 9
8
2 4
9 3 7
0 5 6 1
8
3 2
4 6 5
9 0 7 1
8
4 2
7 3 9
1 6 5 0
9
0 4
7 6 3
1 5 2 8
9
4 0
3 6 7
8 2 5 1

如果{0,3,5},{1,6,8},{2,7,9},{0,6,9}也算这种形状的话,好像没解
csucj 2006-06-22
  • 打赏
  • 举报
回复
up!
zez 2006-06-22
  • 打赏
  • 举报
回复
递归
argenCHN 2006-06-22
  • 打赏
  • 举报
回复
变形了 这种形状哈
*
* *

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧