1005 继续(3n+1)猜想 (25分)(pat)

#include <stdio.h>
int key(int b,int a[],int k);
int main()
{
int k,i,a[100],b[100],count=0,g;
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%d",&a[i]);
}for(i=0;i<k;i++)
{
for(g=i+1;g<k;g++)
{int t;
if(a[i]>a[g])
{
t=a[i];
a[i]=a[g];
a[g]=t;
}//升序排列

}
}

int j=0;
for(i=0;i<k;i++)
{
if(key(a[i],a,k)==1)//是关键数就返回一;否则返回0
{
b[j]=a[i];
j++;
count++;
}
}
for(i=j-1;i>=0;i--)
{
printf("%d",b[i]);
if(i!=0) printf(" ");//空格输出方法
else printf("\n");
}

return 0;
}
int key(int b,int a[] ,int k)
{
int i=0;
for(i=0;i<k;i++)
{
int m=a[i];//用m否则主函数里数组的值会被改变

while(m!=b)
{
while(m!=1)
{


if(m%2==0)
{
m/=2;
if(m==b)
{
return 0;
break;
}
}
else
{
m=(m*3+1)/2;
if(m==b)
{
return 0;
break;
}
}
}
break;

}


}
return 1;
}

posted @ 2020-02-11 14:21  我是个好孩子  阅读(121)  评论(0编辑  收藏  举报