滚开的小说:c语言设计

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 03:44:40
有个c语言的题目想请教一下高手:
在三角形的顶点和中点这6个点上分别输入1,2,3,4,5,6。使各边的和相等。
哪位能告诉我程序怎么写啊?!
详细点啊,大哥!

#include "stdio.h"

/********************************************************
检查函数,用于在第level步填数时判断是否和以前的数字重复
参数:
Level 所检查的点处于什么位置
pat 用于存储6个点上填的数的的数组
i 将要试图填入的数字
如果有重复返回0 如果不重复返回1
*********************************************************/
int check(int Level, int *pat, int i)
{
int cont;
for(cont =0; cont < Level; cont++)/*和前level-1个数进行比较*/
{
if(pat[cont]==i)
{
return 0;
}/*if*/

}/*for*/
return 1;
}
/********************************************************
填数函数,
参数:
pDat 用于存储6个点上填的数的的数组
Level 当前所填的是第几个点
*********************************************************/
void Inp(int *pDat, int Level)
{
int i, c;/*用于记数的临时变量*/
for(i = 1; i <=6; i++)/*对于每个当前层用1-6进行尝试*/
{
if(check(Level,pDat, i)==1)/*测试当前数字i是否可以填入当前位置*/
{
pDat[Level] = i;/*把i填入当前位置*/
if(Level == 5)/*如果这是最后一个位置——第6个(5号位置:因为是从零开始的)*/
{/*下面的if测试是否符合 边一 == 边二 且 边二 == 边三*/
if((pDat[0]+pDat[1]+pDat[2] == pDat[2]+pDat[3]+pDat[4]) && (pDat[4]+pDat[5]+pDat[0] == pDat[2]+pDat[3]+pDat[4]))
{/*输出结果*/
for(c=0; c<6; c++)
{
printf("P[%d]:%d ",c,pDat[c]);
}
printf("\n");
}
}/*if*/
else
{/*如果这不是最后一个位置,则继续填下一个数字*/
Inp(pDat,Level+1);
}/*else*/
}/*if*/
}/*for*/
}
int main(int argc, _TCHAR* argv[])
{
int Dat[6] = {0}; /*用于存放6个数的数足*/
Inp(Dat,0);/*调用函数开始填数*/
getchar();/*等待敲任意键结束*/
return 0;
}

结果;
P[0]:1 P[1]:4 P[2]:5 P[3]:2 P[4]:3 P[5]:6
P[0]:1 P[1]:5 P[2]:3 P[3]:4 P[4]:2 P[5]:6
P[0]:1 P[1]:6 P[2]:2 P[3]:4 P[4]:3 P[5]:5
P[0]:1 P[1]:6 P[2]:3 P[3]:2 P[4]:5 P[5]:4
P[0]:2 P[1]:3 P[2]:6 P[3]:1 P[4]:4 P[5]:5
P[0]:2 P[1]:4 P[2]:3 P[3]:5 P[4]:1 P[5]:6
P[0]:2 P[1]:5 P[2]:4 P[3]:1 P[4]:6 P[5]:3
P[0]:2 P[1]:6 P[2]:1 P[3]:5 P[4]:3 P[5]:4
P[0]:3 P[1]:2 P[2]:5 P[3]:4 P[4]:1 P[5]:6
P[0]:3 P[1]:4 P[2]:2 P[3]:6 P[4]:1 P[5]:5
P[0]:3 P[1]:5 P[2]:1 P[3]:6 P[4]:2 P[5]:4
P[0]:3 P[1]:6 P[2]:1 P[3]:4 P[4]:5 P[5]:2
P[0]:4 P[1]:1 P[2]:6 P[3]:3 P[4]:2 P[5]:5
P[0]:4 P[1]:2 P[2]:6 P[3]:1 P[4]:5 P[5]:3
P[0]:4 P[1]:3 P[2]:5 P[3]:1 P[4]:6 P[5]:2
P[0]:4 P[1]:5 P[2]:2 P[3]:3 P[4]:6 P[5]:1
P[0]:5 P[1]:1 P[2]:6 P[3]:2 P[4]:4 P[5]:3
P[0]:5 P[1]:2 P[2]:3 P[3]:6 P[4]:1 P[5]:4
P[0]:5 P[1]:3 P[2]:4 P[3]:2 P[4]:6 P[5]:1
P[0]:5 P[1]:4 P[2]:1 P[3]:6 P[4]:3 P[5]:2
P[0]:6 P[1]:1 P[2]:4 P[3]:5 P[4]:2 P[5]:3
P[0]:6 P[1]:1 P[2]:5 P[3]:3 P[4]:4 P[5]:2
P[0]:6 P[1]:2 P[2]:4 P[3]:3 P[4]:5 P[5]:1
P[0]:6 P[1]:3 P[2]:2 P[3]:5 P[4]:4 P[5]:1

楼上的好思路
我再提一个最笨思路上的参考:
l[7]={0,1,2,3,4,5,6,};
for(i=1;i<=7;i++){a=l[i];
for(j=1;j<=7;j++){if(j==i) continu;
else
za=l[j];
for(k=1;k<=7;k++){if(k==i||k==j) continu;
else
b=l[3];
for(.....
下面的类似,用for循环列举所有的可能,但是在上一层已经用过的一定要用 if排除掉。最后一个循环体要多加点代码
for(...){....
s1=a+za+b;
s2=b+zb+c;
s3=c+zc+a;
if(s1==s2&&s2=s3) goto next;}
next: printf(".......");