/*思路通过离散数学里迭代的方法,第一个for循环我令(i-1)每次循环后,都自除以2。*/
/*以此来对数组a[15]不断二分为更小的数组,直到每个数组中只剩一个元素。*/
/*在把表达式 (i-1)/2+j*(i+1) 赋值给 t 以后,使用两个break使循环完全终止。*/
/*当将表达式 (i-1)/2+j*(i+1) +1和 t +1分别输出,却发现只有 t 值是正确的。*/
/*在使用break跳出循环以后,i 和 j 的值应该停止改变了。当前,它们的表达式应当与 t 相等,但为何不同呢?*/
/*是我对break使用的方法错了吗?*/
#include<stdio.h>
#include<math.h>
int main(void)
{
int i,j,p,t,n,f;
int a[15]={666,555,300,277,222,188,155,123,99,77,55,33,22,11,1};
p=0;f=0;
scanf("%d",&n);
for(i=15;i>0;i=(i-1)/2)
{
for(j=0;j<pow(2,p);j++)
if(n==a[(i-1)/2+j*(i+1)])
{
t=(i-1)/2+j*(i+1);
f++;break;break;
}
p++;
}
if(f==1)
printf("This number is the %d %dth number in the array.\n",(i-1)/2+j*(i+1)+1,t+1);
else
printf("There is no such number.");
return 0;
}