【PAT_Basic日记】1005. 继续(3n+1)猜想

时间:2021-03-08 02:46:37
#include <stdio.h>
#include <stdlib.h> /**
逻辑上的清晰和代码上的清晰要合二为一
(1)首先在逻辑上一定要清晰每一步需要干什么,
(2)然后在代码上以逻辑的每一步为单位来实现代码
(3)思维逻辑跟不上时,用调试看看,尽量以电脑编译器的思维去想代码的实现
*/ int my_process(int n)
{
if(n%2 == 0)
{
n=n/2;
}
else
{
n=(3*n+1)/2;
}
return n;
} int main()
{
int k;
int a[100]={0};
int *p=a;
int i,j,t;
int n;
//input
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%d",&a[i]);
} //process
for(i=0;i<k;i++)
{
n=a[i];
while(n != 1)
{ n=my_process(n);
for(j=0;j<k;j++)
{
if(p[j]==n)
{
p[j]=1;
break; //break是因为测试例子中没有相同数字
}
}
}
} //sort
for(i=0;i<k;i++)
for(j=0;j<k-i;j++)
{
if(a[j+1]>a[j])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
} //output
printf("%d",a[0]);
for(i=1;i<k;i++)
{
if(a[i]!=1)printf(" %d",a[i]);
}
printf("\n"); return 0;
}