肝了几个小时终于搞出来了,定义的各种变量,到后面搞得我自己都不太清楚哪些变量是干啥的,还好提交时一次通过,非常开心
#include <stdio.h>
int main()
{
int a[100] = {0}; //用于储存输入的数字串
int i=0,j=0,k,flag,e=0,n;
int b[1000] = {0}; //b[1000]用于储存中间步骤产生的数字
int c[100] = {0}; //c[100]用于储存最后要输出的数字
scanf("%d",&n);
while(n)
{
scanf("%d",&a[i]);
k = a[i];
while( k!=1 ) //该步骤是为了将待测试数字挨个进行“砍”,并将其中产生的数字储存于b[j]中
{
if(k % 2)
k = (3*k+1)/2;
else
k = k/2;
j = 0;flag = 1;
while(b[j])
{
if(k == b[j]) {flag = 0; break;} //判断b[j]中是否已储存与K相同的值,防止b[j]中存储过多重复数字
j++;
}
if(flag) b[j] = k;
}
i++;
n--;
}
i=0;
while(a[i]) //该步骤是遍历原输入数字串,找出“关键数”,并储存于c[e]中
{
j = 0;flag = 1;
while(b[j])
{
if( a[i] == b[j]) {flag = 0; break;} //如果a[i]中某数字属于b[i],那么它不是“关键数”
j++;
}
if(flag)
{ c[e]=a[i]; e++;}
i++;
}
for(i=0; i<e-1; i++) //将c[e]中数字按从大到小排序,冒泡排序法; i,j此时可以重新拿来用
for(j=i+1; j<e; j++)
if(c[i] < c[j])
{
k = c[i];
c[i] = c[j];
c[j] = k;
}
while(c[n]) //之前算得n==0
{
printf("%d",c[n]);
n++;
if(c[n]) printf(" "); //注意最后一个数字后没有空格
}
return 0;
}