c++高手请来

来源:百度知道 编辑:UC知道 时间:2024/07/06 10:28:03
数字圆环
输入整数n,构造由整数1,2,…,n组成的数字圆环,使环上任意两个相邻数之和都为素数。例如:当n=8时,该环可以是:1、2、3、8、5、6、7、4。

结果:圆环
条件:圆环的大小(n)

int isValid(int a[ ],int n,int xb,int x)
{
int i;

for(i=1;i<xb;++i){ //是否有重复数;
if( x == a[i] ) return 0;
}
// 与前一个元素的值之和是否为素数;
if( !is_su(x+a[xb-1]) ) return 0;
if( xb == n-1 ){
// 若 xb == n-1 , 与a[0]之和是否为素数
if( !is_su(x+a[0]) ) return 0;
}
return 1;
}

int findValid(int a[ ],int n,int xb)
{
int i;

for(i=a[xb]+1; i<=n;++i){
if( isValid(a,n,xb,i) ) return i;
}

return -1;
}

int digitCircle(int a[ ], int n)
{
int i; int x;

for(i=0; i<n; ++i ){
a[i]=1;
}
i=1;

while( i>0 && i<n ){
x=findValid(a,n,i);
if( x>0 ){
a[i++]=x;
}else{
a[i--]=1;
}
if( i == n ){

主要是判断素数的函数没有实现,还有就是打印语句没有写。你自己也动一下手啊。老大!

写好了。如下:

int isPrime(int x)
{
int i;
for (i = 2; i < x; i++) {
if (x % i == 0)
return 0;
}
return 1;
}

int isValid(int a[ ],int n,int xb,int x)
{
int i;

for(i=1;i<xb;++i){ //是否有重复数;
if( x == a[i] ) return 0;
}
// 与前一个元素的值之和是否为素数;
if( !isPrime(x+a[xb-1]) ) return 0;
if( xb == n-1 ){
// 若 xb == n-1 , 与a[0]之和是否为素数
if( !isPrime(x+a[0]) ) return 0;
}
return 1;
}

int findValid(int a[ ],int n,int xb)
{
int i;

for(i=a[xb]+1; i<=n;++i){
if( isValid(a,n,xb,i) ) return i;
}

return -1;
}

int digitCircle(int a[ ], int n)
{
int i; int x;

for(i=0; i<n; ++