一、题目
略(滑稽)
二、错误分析
测试点3、4段错误一句话解决:
用count[]数组记录出现过的Callatz数过程中
如果建立的count[]数组容量是101,但是可能会忽略求Callatz数的过程中会出现大于100的数,因此,仅当n<=100时,使count[n]++
void Callatz(int n)
{
while(n != 1)
{
n = n % 2 == 0 ? n / 2 : (3*n+1)/2;
if(n<=100)//解决段错误
count[n]++;
}
}
三、完整代码
#include <stdio.h>
#include <stdlib.h>
int count[101];
void Callatz(int);
int cmp(const void *,const void *);
int main()
{
int i,K;
scanf("%d",&K);
int N[K],ans[K],n;
for(i=0 ; i<K ; i++)
{
scanf("%d",&N[i]);
Callatz(N[i]);
}
for(i=0,n=0 ; i<K ; i++)
if(count[N[i]] == 0)
ans[n++]=N[i];
qsort(ans,n,sizeof(int),cmp);
for(i=0 ; i<n ; i++)
printf("%s%d",i == 0 ? "" : " ",ans[i]);
}
void Callatz(int n)
{
while(n != 1)
{
n = n % 2 == 0 ? n / 2 : (3*n+1)/2;
if(n<=100)
count[n]++;
}
}
int cmp(const void *a,const void *b)
{
return *(int *)b-*(int *)a;
}