跪求一个算法

elevation2me 2004-02-02 06:15:01
一个数组:x[15]
要求x[0]+x[1]+x[2]+x[3]、x[0]+x[3]+x[4]+x[5]、x[0]+x[5]+x[6]+x[7]、x[0]+x[7]+x[8]+x[9]、x[0]+x[9]+x[10]+x[11]、x[0]+x[11]+x[12]+x[13]、x[0]+x[13]+x[14]+x[1]的值都为30,并且x[0]到x[14]的取值范围是1-15,各个元素的值不能重复。

最好是用C解决
谢谢了我急着用
...全文
47 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WYlslrt 2004-02-03
  • 打赏
  • 举报
回复
下面代码就是和我上面说的一样。
还有个简单的就是将15个数全排列输出,然后验证哪些排列,这七组数之和等于210,不过复杂度相当高。
int a[15],flag[15];
void formnum(int pos)
{
int i,j,temp;
if(pos<13){
if(pos == 1){ //给出a[1]
for(i=1;i<15;++i){
if(flag[i]) continue;
a[pos] = i;
flag[i] = 1;
temp = 30-a[0]-a[pos];
for(j=1;j<=15;++j)
{
if(flag[j]) continue;
a[pos+1] =j;
flag[j] = 1;
if(flag[temp-a[pos+1]) continue;
a[pos+2] = temp-a[pos+1];
flag[temp-a[pos+1]] = 1;
formnum(pos+2);
}
}
}
else {
temp = 30-a[0]-a[pos];
for(j;j<=15;++j){
if(flag[j]) continue;
a[pos+1] = j;
if(flag[temp-a[pos+1]) continue;
a[pos+2] = temp-a[pos+1];
formnum(pos+2);
}
}
}
else {
if(flag[30-a[0]-a[1]-a[13]]) return;
a[14] = 30-a[0]-a[1]-a[13];
flag[30-a[0]-a[1]-a[13]] = 1;
}
}
main(void)
{
int i;
for(i=0;i<15;++i)
{
a[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
a[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
a[flag[0]++] = i+1;
formnum(1);
}
}
sonic6 2004-02-03
  • 打赏
  • 举报
回复
mark
gnefuil 2004-02-02
  • 打赏
  • 举报
回复
搜索
WYlslrt 2004-02-02
  • 打赏
  • 举报
回复
210
7*0+2*1+2+2*3+4+2*5+6+2*7+8+2*9+10+2*11+12+2*13+14=210
1+2=4+5
3+4=6+7
5+6=8+9
7+8=10+11
9+10=12+13
11+12=1+14
这些数字第一个为这七组数的和。
第二行*前面的为系数,后面的为下标。
以后的为下标。

有上可看,你可以试着先填奇数下标0,1,3,5,7,9,11,13
然后跟上式特征填数,注意不重复。

shshsh_0510 2004-02-02
  • 打赏
  • 举报
回复
好像不均衡区组设计,回去查查书再说

33,029

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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