// 回溯求解n项素数和环,c551#include#include void main(){ int t,i,j,n,k,s,a[2000],b[1000]; printf(" 前n个正整数组成素数和环,请输入整数n: "); scanf("%d",&n); for(k=1;k<=2*n;k++) b[k]=0; for(k=3;k<=2*n;k+=2) { for(t=0,j=3;j<=sqrt(k);j+=2) if(k%j==0) {t=1;break;} if(t==0) b[k]=1; // 奇数k为素数的标记 } printf(" 前%d个正整数组成素数和环,其中5个为:\n",n); a[1]=1;s=0; i=2;a[i]=2; while(1) {t=1; for(j=1;j 1) i--; // 实施回溯 if(i>1) a[i]++; else break; } } // n阶德布鲁金环序列回溯设计,c552#include #include void main(){ ??int d,i,h,k,j,m,m1,m2,n,s,t,x,a[200]; printf("请输入(2 =0;x--) {m1=m1+a[k+x]*d; m2=m2+a[j+x]*d;d=d*2;} if(m1==m2) {t=1;break;} } if(t==0) {s++; if(n<=4 || (n>4 && s<=3)) {printf("NO(%5d): ",s); for(j=0;j<=m-1;j++) printf("%d",a[j]); printf("\n"); } } } } if(i n+1) i--; // 向前回溯 if(a[i]==1 && i==n+1) break; else a[i]=1; } }