c语言选太子问题(约瑟夫问题数学公式)请大神把我的程序的错误之处 指出来 便于我改正 谢谢

3440人阅读
数据结构与算法(14)
约瑟夫问题简述:著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数到3,循环直到所有人都自杀身亡为止。然而Josephus
和他的朋友并不想遵从,于是,他将朋友与自己安排在第16个与第31个位置,于是最后自杀只剩下他们两人,便逃过了这场死亡游戏。
josephus.c
#include &stdio.h&
#include &stdlib.h&
#define TRUE 1
#define FALSE 0
#define ERROR -1
typedef int ElemT //声明元素类型
typedef struct Node
struct Node *
typedef struct Node *LinkL
int InitializeList(LinkList);
int TraverseList(LinkList L);
/*使用循环链表,求解约瑟夫问题*/
int main(int argc,char *argv[])
printf(&********Main*********************************\n&);
L.next=&L;
InitializeList(&L); //初始化循环链表
TraverseList(&L); //求解约瑟夫问题
int InitializeList(LinkList L)
LinkList p,
current=L;
for(i=0;i&41;i++) //初始化41个结点
p=(LinkList)malloc(sizeof(Node));
p-&data=i+1;
p-&next=L;
current-&next=p;
current=p;
int TraverseList(LinkList L)
LinkList p=L,
while(p-&next!=p) //自己指向了自己,说明循环链表除了空的头结点外,就只剩一个结点了。
if(i%3==0) //数到3,这个人就要被咔嚓掉了
printf(&%d,&,p-&next-&data);
p-&next=p-&next-&
free(tmp);
if(p-&next==L) //循环链表的头,是个空节点,所以要跳过它。
p-&next=L-&
printf(&%d,\n&,p-&data); //把最后一个结点的值输出,即最后一个幸存者
return TRUE;
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1057740次
积分:8898
积分:8898
排名:第2099名
原创:88篇
转载:135篇
评论:172条
(1)(1)(1)(7)(1)(4)(2)(1)(2)(3)(1)(2)(3)(14)(12)(8)(16)(1)(1)(2)(3)(6)(11)(9)(9)(11)(2)(2)(3)(4)(13)(12)(4)(6)(7)(6)(5)(1)(1)(1)(2)(4)(3)(13)(2)扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
C语言 电文破译 题目和我编写的程序如下,请大神指出我错在哪里,并改正,答得好的追加.Description有n行电文,每行电文都已按下面规律译成密码:即第1个字母变成第26个字母,第2个字母变成第25个字母,……,第26个字母变成第1个字母.其它非字母字符不变.现在我们已截获n行采取这种方式加密的电文,为了帮助情报员获取正确情报,需要你编写一段程序将加密的电文译回原文.Input输入有若干行,第一行是一个正整数n,表示共需破译n行电文.其后的每行都各是一个字符串,表示截获的加密电文.每行电文最多可以有200个字符,其中包括了大小写字母、空格、标点符号等各种字符.Output对应于每行输入应该输出一行,即对应破译后的电文原文.Sample Input2Dv droo wrhxfhh gsrh kilyovn glnliild.R'ev xszmtvw nb nrmw.Sample OutputWe will discuss this problem tomorrow.I’ve changed my mind.我的代码如下:#include#includeint main(){int n,i,j;char s[210],xiao[26],da[26];while(~scanf("%s",s)){memset(xiao,0,sizeof(xiao));memset(da,0,sizeof(da));for(i=0;i
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
你没有处理第一个数据……人家第一个数据是总的测试个数……你读到哪里去了?#include &stdio.h&#include &algorithm&void Decrypt(char &c){&&&&if ( c &= 'a' && c &= 'z' )&&&&{&&&&&&&&c& = 'z' - (c - 'a');&&&&}&&&&else if ( c &= 'A' && c &= 'Z' )&&&&{&&&&&&&&c = 'Z' - (c - 'A');&&&&}}int main(int argc, char* argv[]){&&&&int n = 0;&&&&scanf( "%d\n" , &n );&&&&while ( n-- & 0 )&&&&{&&&&&&&&char szBuff[200 + 1] = {0};&&&&&&&&gets( szBuff );&&&&&&&&std::for_each( szBuff , szBuff + 200 , Decrypt );&&&&&&&&printf( "%s\n" , szBuff );&&&&}&&&&return 0;}C C++混合物,哈哈,纯粹恶搞~
请用C语言回答,谢谢。
#include &stdio.h&#include &stdlib.h&int main(){&&&&int n = 0;&&&&int nL&&&&int i = 0;&&&&char szBuff[200 + 1] = {0};&&&&char c = '\0';&&&&&&&&&&&scanf( "%d\n" , &n );&&&&&&&&&&&while ( n-- & 0 )&&&&{&&&&&&&&gets( szBuff );&&&&&&&&nLen = strlen(szBuff);&&&&&&&&for( i = 0; i & nL ++i )&&&&&&&&{&&&&&&&&&&&&c = szBuff[i];&&&&&&&&&&&&if ( c &= 'a' && c &= 'z' )&&&&&&&&&&&&{&&&&&&&&&&&&&&&&c& = 'z' - (c - 'a');&&&&&&&&&&&&}&&&&&&&&&&&&else if ( c &= 'A' && c &= 'Z' )&&&&&&&&&&&&{&&&&&&&&&&&&&&&&c = 'Z' - (c - 'A');&&&&&&&&&&&&}&&&&&&&&&&&&szBuff[i] =&&&&&&&&}&&&&&&&&printf( "%s\n" , szBuff );&&&&}&&&&&&&&&&&return 0;}
其他类似问题
扫描下载二维码

我要回帖

更多关于 约瑟夫问题vb 的文章

 

随机推荐