| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1545 人关注过本帖
标题:大家来看看这个排序问题
只看楼主 加入收藏
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 
以下是引用soft_wind在2006-5-13 8:38:00的发言:

#include <stdio.h>
int prim[]={2,3,5,7,11,13,17,19,23,29,31,37};
int b[21];
int counter=0;
int a[20];
int k=1;
void function(int);
int main()
{
int i;
for (i=1;i<21;i++)
b[i]=0;
a[0]=20;
function(20);
getch();
return 0;

}
void function(int j)
{
int m,i;
b[j]=1;
counter++;
if(counter==20)
{
if(j==3||j==9||j==11||j==17)
{
for (m=0;m<k;m++)
printf("%4d",a[m]);
printf("\n");
getch();
}
}
else
{
for(i=0;i<12;i++)
if(b[prim[i]-j]==1||prim[i]-j<=0||prim[i]-j>=20)
continue;
else
{
a[k++]=prim[i]-j;
function(prim[i]-j);
k--;
counter--;
b[prim[i]-j]=0;
}
}
}

这个只输出一种情况,可能有好多种呢,不过我也不知道,当然不能把只是方向不同或开头不同的当成一种.


I am a programmer !
2006-05-13 17:22
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

楼主,您这样说,我就知道您没仔细看我的程序,程序只要按任意键就会产生下一个排列.
而且您题目的意思,我说过,等价于20个数排成一圆环,这样就变成了谁先开头是不相关的.
所以,我认为我的程序虽然烂是烂了些,呵呵,可应该还是可以的,当然,我自己有空也会
再看看有没有缺陷的.


您要想看多种,把我函数中的那个getch()拿掉便是

[此贴子已经被作者于2006-5-14 17:48:19编辑过]


对不礼貌的女生收钱......
2006-05-14 17:46
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 
可是我们这需要我们自己来判断是不是已经把各种情况都输出完了啊!如果重了呢?
重不重这需要我们自己来判断

I am a programmer !
2006-05-14 17:55
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
哎,楼主还这样说,我就没办法了,您到底是不看我的程序,您要看了,就知道不会重了,每输出一次,程序的k和counter自动减1,这样是不会重的。
不过,我的程序倒有一个问题,就是实际的输出个数应是我输出的20倍,因为我是按构成一个圆环来输出的,不分谁第一个,谁最后一个,如果您要改成您所想的,就把程序在输出的时候,以不同的数开始,循环输出20遍就可以输出全部的序列了,而且是不重的。
本来我想改给您看,可是,您不看我程序,说了也没用,我想这个问题还是您自己办吧,

对不礼貌的女生收钱......
2006-05-15 15:38
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
结果太多

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-15 15:40
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
是啊,老长老长的,呵呵,版主老大,您有没有参加学校的编程竞赛啊?

对不礼貌的女生收钱......
2006-05-15 15:54
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

没,HOHO,那估计是计算机学院的事吧

一般人也听不到消息


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-15 16:02
tomry6666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-4-29
收藏
得分:0 

#include <iostream.h>
#include <stdio.h>
int chongfu(int (*p)[40],int forleiji)
{
int leiji=forleiji;
int i,j;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(i!=j)if(p[leiji][i]=p[leiji][j])
{
return(0);
goto quit;
}
return(1);
quit:;
}
int duibi(int (*p)[40],int forleiji)
{
int leiji=(forleiji-1);int yleiji=forleiji; int cishu,a,i;
for(;leiji>=0;leiji--)
{
for(a=0,i=0;i<20;)
{
if(*(*(p+yleiji)+a)==*(*(p+leiji)+i))break;
else i++;
}
cishu=0;
while(*(*(p+yleiji)+a)==*(*(p+leiji)+i))
{
if(cishu==20)break;
else
a++;
i++;
cishu++;
}
if(cishu==20)
{
return(0);
goto quit;
}
}
return(1);
quit:;
}
int shushu(int (*p)[40],int forleiji)
{
int a,i,j;
int leiji=forleiji;
for(i=0;i<21;++i)
{
a = *(*(p+leiji)+i) + *(*(p+leiji)+(i+1));
for(j=1;j<(a-1);j++)
{
if(a%(a-j)==0)
{
return(0);
goto quit;
}
}
}
return(1);
quit:;
}
main()
{
int i=0,j,k,forleiji=-1;
int (*p)[40];
int c[100][40];int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int b[20],e[20]={0};
for(;i<20;i++)
for(;e[i]<20;)
{
if(i==19)
{
b[i]=a[e[i]];
++forleiji;
for(j=0;j<20;j++)c[forleiji][j]=(c[forleiji][j+20]=b[j]);
p=c;
if(shushu(p,forleiji)==1)
if(duibi(p,forleiji)==1)
if(chongfu(p,forleiji)==1)
{
for(j=0;j<20;++j)cout<<" "<<b[j];
printf("\n");
cin>>look;
++forleiji;
}
--forleiji;
if(e[i]==19)
{
for(;e[(i)]==19;--i);
b[i]=a[++e[i]];
for(k=19;k>i;k--)b[k]=(e[k]=0);
++i;
}
else e[i]++;
}
else
{
b[i]=a[e[i]];
break;
}
}
}




2006-05-16 22:51
tomry6666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-4-29
收藏
得分:0 

刚学所以偶做了一天,
这个程序要很久才出结果,因为用了最蠢的办法啊~~哎,,努力尝试中.....

2006-05-16 22:53
roman
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-17
收藏
得分:0 

如果对自己的电脑有自信,试试这个更傻的:
#include <stdio.h>
#include <math.h>
int main()
{
int a , b , c , d , e , f , g , h ,i , j , k , l , m , n , o , p , q , r ,s , t , y , v;
int x[20] = {0};
for(a = 1; a < 21; a++)
for(b = 1; b < 21; b++)
for(c = 1; c < 21; c++)
for(d = 1; d < 21; d++)
for(e = 1; e < 21; e++)
for(f = 1; f < 21; f++)
for(g = 1; g < 21; g++)
for(h = 1; h < 21; h++)
for(i = 1; i < 21; i++)
for(j = 1; j < 21; j++)
for(k = 1; k < 21; k++)
for(l = 1; l < 21; l++)
for(n = 1; m < 21; m++)
for(n = 1; n < 21; n++)
for(p = 1; o < 21; o++)
for(q = 1; q < 21; q++)
for(r = 1; r < 21; r++)
for(s = 1; s < 21; s++)
for(t = 1; t < 21; t++)
{
if(a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s +t ==210&& a != b &&....s != t)
{
x[0] = a;
x[1] = b;
x[2] = c;
x[3] = d;
x[4] = e;
x[5] = f;
x[6] = g;
x[7] = h;
x[8] = i;
x[9] = j;
x[10] = k;
x[11] = l;
x[12] = m;
x[13] = n;
x[14] = o;
x[15] = p;
x[16] = q;
x[17] = r;
x[18] = s;
x[19] = t;
y = 0;
for(v = 0; v < 19; v++)
{
if((abs)((x[v + 1] - x[v])%2) == 1)
y++;
}
if(y == 19)
{
for(v = 0; v < 20; v++)
printf("%d",x[v]);
}
printf("\n");
}
}

}


智者乐观,仁者达观
2006-05-17 22:27
快速回复:大家来看看这个排序问题
数据加载中...
 
   



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

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