程序3-5:
厄拉多塞筛:
从1到N,如果查找到一个数a是素数,那么将2*a, 3*a, ... M*a (M*a <N)全部删除,一直到没有可以删除为止,这样剩下的数就是素数。
质数,又称为素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
#include <stdio.h>
#define N 10000
main()
{
int i,j,a[N];
for (i = 2; i < N; i++)
{
a[i] = 1;
}
for (i = 2; i< N; i++)
{
if(a[i])
{
for ( j = i ; j < N/i ; j++ )
{
a[i*j] = 0;
}
}
}
for ( i = 2 ; i < N ; i++ )
{
if ( a[i] )
{
printf("%4d\n",i);
}
}
}
练习题11,假如将a声明为a[99]。写出执行如下两条语句后数组的内容:
for(i=0; i<99; i++) a[i]=98-i;
for(i=0; i<99; i++) a[i]=a[a[i]];
#include <stdio.h>
int main()
{
int a[99] = {0};
int i = 0;
for(i = 0; i < 99; i++)
{
a[i] = 98-i;
}
for(i =0; i < 99; i++)
{
a[i]=a[a[i]];
printf("%d\n",a[i]);
}
return 0;
}
程序3-9:
约瑟夫问题:
#include <stdlib.h>
#include <stdio.h>
typedef struct node *link;
struct node
{
int item;
link next;
};
程序3-10
链表倒置:
link reverse(link x)
{
link t, y = x, r= NULL;
while(y != NULL)
{
t = y->next;
y->next = r;
r = y;
y = t;
}
}
程序3-11 表插入排序
struct node heada, headb;
link t, u, x, a = &heada, b;
for (i=0, t=a; i < N; i++)
{
t->next = malloc(sizeof *t);
t = t->next;
t->next = NULL;
t->item = rand() %1000;
}
b = &headb;
b->next = NULL:
for( t=a->next; t!=NULL; t=u)
{
u = t->next;
for(x=b; x->next != NULL; x=x->next)
{
if(x->next->item > t->item)
{
break;
}
}
t->next = x->next;
x->next = t;
}
34.编写一个函数,将已知表中的最大项移为表的最后一个节点。