#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList;
//解决约瑟夫问题
int yue (int m, int n) {
//head指向不带头节点的循环单链表
LinkList head = NULL, cur, p, q;
int i, j;
//生成第一个节点
head = (LinkList) malloc (sizeof(LNode));
head->data = 1;
head->next = head;
//使用尾插法按顺序生成节点
p = head;
for (i=1; i<=m; i++) {
if (i==1) /* 首结点 */
p->data = i; /* 向已存在的首结点写入编号 */
else {
q = (LinkList) malloc (sizeof(LNode)); /* 生成新结点 */
if(!q) /* 内存分配失败 */
exit (OVERFLOW);
q->data = i; /* 为第i个人编号 */
p->next = q; /* 将q链接到p之后,即表尾 */
q->next = head; /* 将q链接到首结点之前 */
p = p->next; /* p指向表尾 */
}
}
//约瑟夫开始
cur = head;
printf ("出列顺序:");
//循环m-1次
for(i = 1; i < m; i++) {
//每次循环开始计数
for (j=1; jcur = cur->next;
q = cur->next; /* q指向p的后继结点,q即报到k之人 */
cur->next = q->next; /* p的后继结点跨过q,指向q的后继结点 */
printf("%d\t", q->data);
if (q == head) /* q是首结点 */
head = q->next; /* 移动首结点 */
free (q); /* 删除q结点 */
cur = cur->next; /* p指向下一个结点 */
j--; /* 人数减一 */
}
putchar ('\n');
//返回最后剩下的节点数据域,即为最后剩下的人
return cur->data;
}
int main (void) {
printf ("最后剩下的人:%d\n", yue (8, 3)); //8个人,报3者出列
//运行结束后,需要销毁链表,此处略
getch (); /* 屏幕暂留 */
return 0 ;
}
我们每一个人都在用微信聊天,微信这款软件已经很快的融进我们的生活了,我们用微信快速发送语音短信、视频、图片和文字,非常的方便。其实想要微信离线接收消息是需要对微信设置才能实现这个功能的。 方法一:进入手机微信,然后找到"联系人"中的"系统插件",直接打开"QQ离线消息"。在其中找到"插件设置",接着找到"接收QQ离线消息"选项。其中有"已启用"和"未启用"两个选项,我们选择"已启用"然后确定保存即可。 方法二:进入手机微信,然后进入"设置"--"隐私设置"--然后在"QQ上显示微信在线"一栏里"设置为未启用",保存即可。这样一来,在隐身或QQ离线时,对方看到你的QQ头像处依然有微信图标,但显示的是灰色,也可以随时接收微信离线消息,这样就实现了我们想要的效果了。 方法三:进入微信,然后找到"通讯录",进去之后找到"离线助手",点击"设置"即