有n个人围成一圈从1-3报数
答:n=1,1留,n=2,2留,n=3,2留,n=4,1留,5,4留。然后n大于等于6时,n=6,1留,n=7,4留,n=8,7留,…即留=3乘以(n除以3的余数)+1。n>=6
答:也就是你所需要的的最后留下来的那个号。数组。先定义好一个足够长的数组,并初始化好数组的数据位(填入1~n),与上述类似,加个计数,当为3时把该数据置为一个特殊值(如0),表示已从该数组中删除。依此下去,直到剩下最后一个不为0的值就是你所需要的值(如果不考虑效率的话,每删除一个...
答:include <stdio.h> define N 10 void main(){ char student[N];//N个人,1表示未退出,0表示已经退出 int out[N];//退出的人的号码记录 int count = -1;//循环计数 0,1,2 <=> 1-3 int num_out = -1;//退出号码记录的数组的下标 memset(student, 1, sizeof(student));//将...
答:printf("请输入人数:\n");scanf("%d",&n);for(i=0; i<n; i++) //给数组num[]赋值从1开始到n { (p+i)=i+1;} k=0;m=0;i=0;while(m<n-1) //当出局了12个人之后跳出循环 { if(*(p+i)!=0){ k++;} if(k==3) //k表示点到第三个之后要出局 { (p+i...
答:大致的思路:定义list集合,利用for循环添加1—n元素,利用if判断,对3取余为0的删除,查看最终输出结果。试着自己做,不懂再问
答:for(i=0;p<num+n;i++,p++)p=i+1;//给每个人从未有1开始排个号 p=num;k=n;//从第一个人报数起,k用来计算剩下的人数 for(m=0,i=0;k!=1;i++) //用k来控制出口 { if(p>(num+n-1)) p=num; //把人围成一个圈那样,最后一人报后,又回到队头 if(*p!=0) m...
答:/*---*/ include<iostream.h> void leave(int n) //n个人围成一圈,数到3的人退出,最后剩下的人编号为 { int k=1; //计数值 int i=1;int temp=n;int a[100];for(;i<=n;i++)a[i]=i; //给每个人编号 while(n>1){ for(i=1;i<=temp;i++){ if(k==3&&a[i...
答:1. 有N个人围成一圈,顺序排号,从第一个人开始报数,凡是报到M的人退出圈子,问最后留下的几号?2. N个人围成一圈,从第S个人开始顺时针1,2,3,4,...M的顺序报数,数到M的人出圈,然后从出圈的下一个人开始重复此过程,输出所有出圈的人的顺序。N个人围成一圈,从第1个人开始顺时针1,2,...
答:又易知,最后剩下的人,在最后一轮的报数必然为1,那么可以利用同余式倒推其原始编号:(((1 + M)% 2 + M) % 3)+ M % 4。。。变成程序为:include <cstdio> using namespace std;const int M = 3;int main(){ int n, i, ind;printf("please input a number:");scanf("%d...
答:int out = 0; //退出的人数 int num = 0; //报数 int a[1024] = {0}; //0表示退出圈子 printf("Input n:");scanf("%d", &n);for (i = 0; i < n; i++){ a[i] = 1;} i = 0;while (out != n-1){ if (a[i] == 1){ num++;} if (num == 3){ a[i]...
网友评论:
贺融19424168010:
有N个人围成一圈,顺序排号.从第一个开始报数,(从1到3报数),凡报道3的人退出圈子,问最后留下的是原来第几号那位 -
30821薛虞
:[答案] #include #define n 100 void main() {int a[n],i,quit_num,k; for(i=0;ia[i]=i+1; quit_num=0;/*出圈人数*/ i=0; k=0; while(quit_num{... { int i; for(i=1;i} /*下面函数表示从指针h处开始的人数为boy个人排队,从1报数,每报到call的人出列*/ void outline(int *h,...
贺融19424168010:
有n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的 -
30821薛虞
: 弄个三元数组,a[x][y][z],x保存它的原序号(即1~n),y保存数数时的序号(即1、2、3),z保存该数是否曾为3(初始值为0,成为3拨为1).先令m=n,再嵌套循环,外循环判断m是否为1,为1即得到结果跳出循环,不是则进入内循环,并分类讨...
贺融19424168010:
2:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3... -
30821薛虞
:[答案] 扩展为:从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出链表实现:#include #include typedef struct Node{int index;struct Node *next;}JosephuNode;int Josephu(int n,int m){int i,j;JosephuNode *head...
贺融19424168010:
有n个人围成一圈,顺序排号.从第一个人开始报数(从1报道3),凡报到3的人退出圈子,问最后留下的是 -
30821薛虞
: 先研究一些例子.n=3时,留下1,2;n=4时,若只报数一轮,则剩下1,2,4;若报数两轮,则剩下首次报1,4的.n=5时,若只报数一轮,则剩下1,2,4,5;若报数两轮,则剩下首次报2,4的.n=6时,若只报数一轮,则剩下1,2,4,5;若报数两轮,则剩下首次报1,2,5的.若继续报数,则剩下首次报1,5的.以此类推,最后留下两人,他们的首次报数在变.
贺融19424168010:
C语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子 问最后留下 -
30821薛虞
: 这样做可以,不过时间复杂度不太好,为O(n ^ 2).事实上,约瑟夫问题存在着时间复杂度为O(n)的解法.要解决这个问题,要用到同余这个数学工具.下面,假设目前还剩下K个人,这K个人从1到M报数,那么,当第M个人被杀后,剩下的人将...
贺融19424168010:
用指针完成下面程序:有n个人围成一圈,顺序排号,从第一个人开始报数(从1 - 3报数),凡报到3的退出圈子, -
30821薛虞
: 人的编号是从1开始的 #include <stdio.h> #include <stdlib.h>struct peo{int dat;struct peo *next; }; int main() {int i,n;struct peo *head,*tail;scanf("%d",&n);head=(struct peo *)malloc(sizeof(struct peo));head->dat=1;tail=head;tail->next=...
贺融19424168010:
假定有N个小朋友,分别编号为1到N,他们按编号围成一个圆圈,从1开始报数,当报到3的小朋友出列,由下一个小朋友重新开始报1,直到最后剩下一个小... -
30821薛虞
:[答案] static void LastLeaver(int nums, int count) { int[] num = new int[nums]; for (int index = 0; index解析看不懂?免费查看同类题视频解析查看解答
贺融19424168010:
C语言:有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子 -
30821薛虞
: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18#include <stdio.h> constintM = 3; intmain() {intn, s = 0;scanf("%d", &n);if(n>10000){printf("n must be a natural number less than 10000 \n";printf("%d is out of range of valid values.",n);...
贺融19424168010:
java编程,有n个人围成一圈,顺序排号,从一号到n号,从第一个开始报数,(从1报到3)凡报到3的 -
30821薛虞
: 这么经典的面向对象题目 以下代码仅供参考 import java.util.Scanner;public class Main { public static void main(String[] args) {int n;Scanner scanner = new Scanner(System.in);System.out.println("请输入一个正整数:");n = scanner....
贺融19424168010:
c语言题目;有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出 .... -
30821薛虞
: 这个问题叫约瑟夫环问题. n个人围成一圈,按顺序编号,分别为1、2、3..n.(你可以理解成每个人的座号). 然后1号开始,每人依次报号.即 (这里假设n=5) (前面是座号、后面是他报的号) 1:1 2:2 3:3(退出) 现在只剩下座号为1、2、4、5的人,从3的下一个开始报号 4:1 5:2 1:3(退出) 2:1 4:2 5:3(退出) 2:1 4:2 2:3(退出) 最后剩下4,就是当n=5时,你要得到的值是4