核心:把一个数衍生出来的数列与输入时的几个数字一一比较。看是否相等。
问题来了,如何体现出衍生数列的元素有与输入数字相等的呢? ---修改被覆盖的那个数字为1,因为如果相等的话,这个数字就不是想要的结果。而且1肯定是被覆盖的,即使输入是1也不影响。、后面打印的时候排除1。
#include<stdio.h>
int main()
{
int d1[99]={0}; //存储输入数据
int d2[99]={0};// 存储衍生的数
int k;
scanf("%d",&k);
int i;
for(i=0;i<k;i++)
scanf("%d",&d1[i]);
for(i=0;i<k;i++)
{
int j=0; //d2索引
int n=d1[i];
while(n!=1)
{
if(n%2==0)
{
n=n/2;
d2[j++]=n;
}
else
{
n=n*3+1;
d2[j++]=n;
}
}
int m=0;// jishu
for(m=0;m<k;m++)
{
int c; //jishu
//检测覆盖
for(c=0;c<j;c++)
{
if(d2[c]==d1[m])
{
d1[m]=1;
}
}
}
}
int j;
int x=k;
for(i=0;i<k-1;i++)
{
for(j=0;j<x-1;j++)
{
if(d1[j]<d1[j-1])
{
int m;
m=d1[j];
d1[j]=d1[j+1];
d1[j+1]=m;
}
}
x--;
}
for(i=0;i<k;i++)
{
if(d1[i]!=1)
printf("%d ",d1[i]);
}
return 0;
}
但有两个点说数组越界访问,有人知道怎么查到测试的数据或者能看出我代码的问题吗?