约瑟夫问题
2009-09-01 20:31
190 查看
题目:古代某法官要判决n个犯人死刑,他有一条荒唐的逻辑,将犯人首尾相接排成圆圈,然后从第s个人开始数起,每数到第m个犯人,就拉出来处决,然后又数m个,数到的犯人又拉出来处决,依次类推。剩下的最后一个人可以赦免。
分析:当热用循环链表和队列都可以实现,下面虽然没有直接引用,但也没有离开它们的影子。用字符串表示所有犯人,主要三个指针,一个记录下次开始数起的地址*jilu,一个执行遍历实现数的过程*w,一个字符串常量指针*temp记录删除一个字符后的字符串。
最要控制好遇到‘/0’时的指针跳转。由于用的是计事本所以格式不好控制
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void findkill(char *p,int s,int m)
{
//temp记录去掉一个字符的字符串
char *temp=(char *)malloc(strlen(p));
char *w,kill,*jilu;
jilu=&p[s-1];//记录重新开始数的地址
int i,j;
while(strlen(p)>0)
{
if(strlen(p)==1)
{
printf("the man is not killed!/n");
printf("%s/n",p);
break;
}
else
{
w=jilu;
for(i=0;i<m;i++)
{
if(*w=='/0')
{
w=p;
continue;
}
w++;
}
if(*w=='/0')
{
jilu=p;
}
else
{
jilu=w;
}
kill=*(w-1);
for(i=0,j=0;i<strlen(p);i++)
{
if(*(p+i)!=kill)
{
*(temp+j)=*(p+i);
j++;
}
}
*(temp+j)='/0';
p=temp;
}
}
printf("%s/n",p);
free(temp);
}
int main()
{
char *string="123";
int s=3,m=5;
findkill(string,s,m);
return 0;
}
分析:当热用循环链表和队列都可以实现,下面虽然没有直接引用,但也没有离开它们的影子。用字符串表示所有犯人,主要三个指针,一个记录下次开始数起的地址*jilu,一个执行遍历实现数的过程*w,一个字符串常量指针*temp记录删除一个字符后的字符串。
最要控制好遇到‘/0’时的指针跳转。由于用的是计事本所以格式不好控制
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void findkill(char *p,int s,int m)
{
//temp记录去掉一个字符的字符串
char *temp=(char *)malloc(strlen(p));
char *w,kill,*jilu;
jilu=&p[s-1];//记录重新开始数的地址
int i,j;
while(strlen(p)>0)
{
if(strlen(p)==1)
{
printf("the man is not killed!/n");
printf("%s/n",p);
break;
}
else
{
w=jilu;
for(i=0;i<m;i++)
{
if(*w=='/0')
{
w=p;
continue;
}
w++;
}
if(*w=='/0')
{
jilu=p;
}
else
{
jilu=w;
}
kill=*(w-1);
for(i=0,j=0;i<strlen(p);i++)
{
if(*(p+i)!=kill)
{
*(temp+j)=*(p+i);
j++;
}
}
*(temp+j)='/0';
p=temp;
}
}
printf("%s/n",p);
free(temp);
}
int main()
{
char *string="123";
int s=3,m=5;
findkill(string,s,m);
return 0;
}
相关文章推荐
- 3517 And Then There Was One 约瑟夫问题
- 数据结构与算法(单循环链表_约瑟夫问题)
- 关于 约瑟夫问题,报道m值的数出列。
- 约瑟夫问题 双链表实现
- Wiki OI 1282 约瑟夫问题
- 约瑟夫问题
- 约瑟夫的幸存者问题
- PHP基于关联数组20行代码搞定约瑟夫问题示例
- 约瑟夫问题--双向循环链表的创建与删除
- Josephus约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题的解法-良好接口的重要性
- UVa 10940 Throwing cards away II (约瑟夫问题)
- 约瑟夫问题的PHP实现——猴子选大王的问题
- 数据结构与算法——约瑟夫问题
- POJ_1781_In Danger_约瑟夫问题
- 约瑟夫问题递归求解
- 利用循环链表实现约瑟夫问题的求解
- 约瑟夫问题 【物联网1132-11】
- 用单循环链表实现约瑟夫问题。