欢迎来到天天文库
浏览记录
ID:28361677
大小:32.50 KB
页数:4页
时间:2018-12-09
《从第一个人开始报数(从1到3),凡报到3的人退出圈子,.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、有n个人围成一圈,顺序编号。从第一个人开始报数(从1到3),凡报到3的人退出圈子,问最后一个圈中的人的编号?方法一:算法分析:1.可以用一个数组保存n个人的编号,当此人退出圈子时将编号变为0;2.用一个计数器i模拟每个人的编号,如果此人已出圈(即编号为0),则跳过此人不计数,否则进行累加,当报完一圈后将i置0,重新计数;3.用一个计数器k模拟报数,当k==m时,将k置0再从头报数。4.用一个变量quit_num记录出圈的人数,当圈中只剩一个人时,即quit_num==n-1,停止报数,输出结果。5.对数组进行搜索,查
2、找编号不为零的人(留在圈中的人),输出他的编号。流程图:见下图结束流程图*(p+i)=0m++k=0k==m?YNk++*(p+i)!=0?YNi=0i==n?YN查找留在圈中的人输出结果开始给m,p,k赋初值给所有的人编号m3、针,使其指向num数组cout<<"请输入总人数(不大于200):";cin>>n;p=num;//给所有的人编号为1到nfor(i=0;i4、中的人cout<<"最后流下的是"<<*p<<"号"<#include#includetypedefstruct_link{struct_link*next;intpos;}link;intmain(intargc,char*argv[]){link*front,*p,*last;p=front=(link*)malloc(sizeof(link));/*先分配一个*/p->pos=5、1;intn,i=0,num=3;cout<<"请输入总人数:";cin>>n;for(i=2;i<=n;i++)/*再分配其它的,总共n个*/{p->next=(link*)malloc(sizeof(link));p=p->next;p->pos=i;}p->next=front;/*使之围成一个圈*/i=0;/*从头开始数*/last=p=front;/*从头开始数*/while(p->next!=p)/*当p->next==p时就只剩一个了*/{i++;/*数数*/if(i==3)/*数到3了,此退出*/{l6、ast->next=p->next;free(p);p=last;i=0;}last=p;//last的作用是保存前一个link,如果是双向链表,就不需要它了p=p->next;//到下一个人}cout<<"最后流下的是"<pos<<"号"<
3、针,使其指向num数组cout<<"请输入总人数(不大于200):";cin>>n;p=num;//给所有的人编号为1到nfor(i=0;i4、中的人cout<<"最后流下的是"<<*p<<"号"<#include#includetypedefstruct_link{struct_link*next;intpos;}link;intmain(intargc,char*argv[]){link*front,*p,*last;p=front=(link*)malloc(sizeof(link));/*先分配一个*/p->pos=5、1;intn,i=0,num=3;cout<<"请输入总人数:";cin>>n;for(i=2;i<=n;i++)/*再分配其它的,总共n个*/{p->next=(link*)malloc(sizeof(link));p=p->next;p->pos=i;}p->next=front;/*使之围成一个圈*/i=0;/*从头开始数*/last=p=front;/*从头开始数*/while(p->next!=p)/*当p->next==p时就只剩一个了*/{i++;/*数数*/if(i==3)/*数到3了,此退出*/{l6、ast->next=p->next;free(p);p=last;i=0;}last=p;//last的作用是保存前一个link,如果是双向链表,就不需要它了p=p->next;//到下一个人}cout<<"最后流下的是"<pos<<"号"<
4、中的人cout<<"最后流下的是"<<*p<<"号"<#include#includetypedefstruct_link{struct_link*next;intpos;}link;intmain(intargc,char*argv[]){link*front,*p,*last;p=front=(link*)malloc(sizeof(link));/*先分配一个*/p->pos=
5、1;intn,i=0,num=3;cout<<"请输入总人数:";cin>>n;for(i=2;i<=n;i++)/*再分配其它的,总共n个*/{p->next=(link*)malloc(sizeof(link));p=p->next;p->pos=i;}p->next=front;/*使之围成一个圈*/i=0;/*从头开始数*/last=p=front;/*从头开始数*/while(p->next!=p)/*当p->next==p时就只剩一个了*/{i++;/*数数*/if(i==3)/*数到3了,此退出*/{l
6、ast->next=p->next;free(p);p=last;i=0;}last=p;//last的作用是保存前一个link,如果是双向链表,就不需要它了p=p->next;//到下一个人}cout<<"最后流下的是"<pos<<"号"<
此文档下载收益归作者所有