#include <stdio.h>
#include <assert.h>
void Find(int *a, int *n)
{
assert(a != NULL && n != NULL);
int i;
int nCount=0;
for(i=7; i<1000; i+=7)
{
if(i%11 != 0)
a[nCount++] = i;
}
for(i=11; i<1000; i+=11)
{
if(i%7 != 0)
a[nCount++] = i;
}
*n = nCount;
}
// 下面是根据网友留言重新更改的函数,循环次数减少10%左右,但由于没有使用除法运算,所以整体速度提升了好几倍
void Find1(int *a, int *n)
{
assert(a != NULL && n != NULL);
int i, j;
int nCount=0;
int temp;
for(i=0; i<=1000/77; ++i)
{
temp = 77 * i;
for(j=1; j<7; ++j)
{
a[nCount++] = temp+7*j;
a[nCount++] = temp+11*j;
}
for(j=7; j<11; ++j)
a[nCount++] = temp+7*j;
}
*n = nCount;
}
int main()
{
int a[300];
int n;
Find(a, &n);
printf("Totally %d numbers, as following: \n", n);
for(int i=0; i<n; ++i)
{
printf("%d\t", a[i]);
}
printf("\n");
return 0;
}
评论