如何实现这个循环?
有一组数{0,1,2,3,4,5,6,7,8,9}
和两个指针:*p1,*p2。
现在要求开始搜索这一组数,用p1指向搜索到的第一个数,用p2指向剩余的数,再用p1和p2进行大小比较。即,先让p1-> 0,p2-> {1,2,3,4,5,6,7,8,9},用p1和p2比较大小后得到{-1,-2,-3,-4,-5,-6,-7,-8,-9}。
比较一次后,把{0}抛弃掉,把p1-> 1,p2-> {2,3,4,5,6,7,8,9},再用p1,p2进行比较,再抛弃{1},依次循环,直至所有数都比较过为止。
这个循环如何实现?
以上的数和指针都是举例,大家可自定义,最重要是实现这个循环的方法,希望大家赐教,有参考代码就更好了,谢谢!
[解决办法]
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p1, *p2;
int *last=a+n-1; // n=10;
for (p1 = a; p1 <last; p1++)
{
for (p2 = p1+1; p2 <=last; p2++)
{
if (compare(*p1, *p2) < 0) {
// ...
}
}
}
[解决办法]
main()
{
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p1,*p2;
int i,j;
for(i=0;i <9;i++)
{
p1=&a[i];
for(j=i+1;j <10;j++)
{
p2=&a[j];
if(*p1 <*p2)
printf( "%d ",*p1-*p2);
}
printf( "\n ");
}
}
源程序,可以得到LZ要求的结果,但应该还有更高效率的代码,今晚睡觉的时候再想想!
[解决办法]
mark
如果不用存这些{-1,-2,-3,-4,-5,-6,-7,-8,-9}。我也来试下
a[]={0,1,2,3,4,5,6,7,8,9}
p1=a;
p2=a;
for( i=0 ;i <10 ;i++)
for( j=i+1 ;j <10;j++)
{ ci=p1[i]-p2[j];
if (ci> 0)
{}
else if (ci <0)
{}
else //(ci==0)
{}
}