程式設計挑戰

forever_zzx發表於2014-10-12


求助題給定正整數序列x1,x2,…xn,和一個正整數m,問是否可以找到一個子序列,使得子序列的最小公倍數恰好等於m? 

輸入格式: 

多組資料,每組資料第一行是2個正整數n,m。0<n<=10000, 0<m<=1000000000。 

接下來一行包含n個空白分隔的正整數,表示數列裡的數,每個正整數小於1000000000。 

輸出格式: 

每組資料一行,如果可以輸出Possible,否則輸出Impossible。 

 

 

答題說明

輸入樣例 

4 20 

2 3 4 5 

3 60 

2 3 4 

輸出樣例: 

Possible 

Impossible 

以下是我的程式,在我的VS裡面可以編譯成功,但是提交到網上後卻出了問題 

mycode:

 

#include<iostream>

using namespace std;

int fun1(int a,int b)

{

int i;

for(i=a;i<=a*b;i++)

if( !(i%a+i%b) )

return i;

}

int fun2(int c[],int x,int m)

{

int i,k,flag;

for(k=fun1(c[0],c[1]),i=2;i<x;i++)

{

k=fun1(k,c[i]);

}

if(m==k)

flag=1;

else

flag=0;

return flag;

}

void fun3(int n,int b[],int m)

{

int i,k=0,j=0,x,c[100];

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

if(m%b[i]==0)

{

c[j]=b[i];

for(k=++i;m%b[k]==0;k++)

c[++j]=b[k];

x=j+1;

if( fun2(c,x,m) )

{

printf("Possible\n");

return;

}

}

printf("impossible\n");

 

}

 

void main()

{

int i,n[2],m[2],t,j;

int a[1000][100];

for(i=0;i<2;i++)

{

cin>>n[i]>>m[i];

t=n[i];

for(j=0;j<t;j++)

cin>>a[i][j];

}

for(i=0;i<2;i++)

fun3(n[i],a[i],m[i]);

}


求解答???

相關文章