- 注册时间
- 2009-7-21
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 4489
- 在线时间
- 小时
|
发表于 2009-8-27 08:44:11
|
显示全部楼层
本帖最后由 〇〇 于 2009-8-27 08:51 编辑
47# mathe
我用你的算法改写的vc版本,怎么出来252个结果?-
- #include <stdio.h>
- #include <conio.h>
- //#include <windows.h>
- #include "2M.txt"
- void output(int *p); //输出函数
- void permutation(int *p);//全排列函数
- void test(__int64 r);
-
- int a[]={0,1,2,5,6,7};//待排列数组
- int N=sizeof(a)/sizeof(int); //数组长度
- int *p=a; //数组指针
- int n=0;
- int m[720];
- void test(__int64 r)
-
- {
-
- int i;
-
- for(i=0;i<141800;i++){///skip prime 2 and 3
-
- if(prime[i]>=1900000)return;
-
- if(r%prime[i]==0)break;
-
- }
-
- if(prime[i]<10000)return;
-
- printf("%I64d=%d*%d\n",r,prime[i],r/prime[i]);
-
- }
-
-
- void main()
- {
- output(p);
- permutation(p); //调用全排列函数
- __int64 r=189e8;
- for(int i=0;i<720;i++)
- test(r+m[i]*100+43);
-
- //output(p); //输出排列结果
- //getch();
- }
-
- void permutation(int *p)
- {
- bool flag=false; //标志排列是否结束
- int temp; //临时变量,用来交换数组元素
-
- while(1)
- {
- for(int i=0;i<N-1;i++)
- {
- flag=true; //如已排列完,falg为真
-
- if(p[i]<p[i+1]) //如果发现第一个倒序的数组元素,p[i+1]被称为倒序元素
- {
- flag=false; //说明未排列完
-
- int j=0;
- while(p[j++]>=p[i+1]); //找到第一个大于或等于倒序元素的数组元素
- j-=1;
-
- temp=p[i+1]; //交换这两个元素
- p[i+1]=p[j];
- p[j]=temp;
-
- j=0;
- while(j<(i+1)/2) //倒置倒充元素原位置以前的所有元素
- {
- temp=p[j];
- p[j]=p[i-j];
- p[i-j]=temp;
-
- j++;
- }
- break; //跳出for循环,
- }
- }
- if(flag) //如果排列完,结束循环
- break;
- output(p); //输出排列结果
- }
- }
-
- void output(int *p)
- {
- int s=0;
- for(int i=0;i<N;i++)
- s=s*10+p[i];
- m[n++]=s;
- //printf("%06d",s);
- //printf("\n");
-
- }
复制代码 |
-
-
2M.rar
407.81 KB, 下载次数: 2, 下载积分: 金币 -1 枚, 经验 1 点, 下载 1 次
-
-
perm2.txt
6.48 KB, 下载次数: 0, 下载积分: 金币 -1 枚, 经验 1 点, 下载 1 次
|