完成下列程序(不要调入出题人的陷阱)
*
*.*.
*..*..*..
*...*...*...*...
*....*....*....*....*....
*.....*.....*.....*.....*.....*.....
*......*......*......*......*......*......*......
*.......*.......*.......*.......*.......*.......*.......*.......
#include
#define N 8
int main()
{
int i;
int k;
---------------------------------------------------------
| |
| |
| |
---------------------------------------------------------
return 0;
}
一:
for(i=0;i {
for(k=0;k<=i;k++)
{
printf("*");
for(int j=0;j<=i;j++) printf(".");//把变量定义放在这
}
printf("\n");
}
二:
for (i = 1; i <= N; i++)
{
for (k = 1; k <= i*i; k++)
{
if( (k % i == 1)||(i==1))
printf("*");
else
printf(".");
}
printf("\n");
}
循环
一个长度未知的单向链表可能内含循环(最后一个节点指向链表中的另一个节点,而不是指向NULL).假设你只能使用两个指针,
它们初始化时都指向这个单向链表头,说明你怎么去判断这个链表中是否内含循环?(链表内的节点数时有限的,而你必须证明
do
{
if(p1 == NULL)
return FALSE;
else
p1 = p1->next;
if(p2 == NULL)
return FALSE;
else
p2 = p2->next;
if(p2 == NULL)
return FALSE;
else
p2 = p2->next;
}while(p1 != p2);
return TRUE;
当步长为2的指针跟步长为1的指针在同一起点一起向前运动的时候,
可以注意到步长为2的指针(记为p2)
相对于步长为1的指针(记为p1)的速度为1,
当单向链表中存在环的时候,这两个指针总会在某一时刻同时
进入这个环,而由于刚才说的相对速度为1,
不妨设这个环的长度为L,从p2顺时针到p1的距离为D(即追赶p1),
那么经过D步后,p2赶上p1,即p2=p1。
于是在这个过程中如果p2=p1,那么有环,
如果没环那么程序总会遇到Null而结束。
阅读(665) | 评论(0) | 转发(0) |