C语言算法碎碎记录之“一圈人,数到几的人就出去,最后一个是几号”
2012-03-09 09:54
274 查看
一队列有N个人,从第一位开始报数,报到3的人出列,后面的人继续从1开始报数,报到末尾后从头开始,如此反复。请确定最后一位是原队列中的第几个人。N的值为正整数。
看到这道题目,以前做过。现在来复习一下吧:
首先用结构体 和 循环单链表来做,最简单:
View Code
这个遇到的问题就是 如果是函数传递 二维数组的参数,有错误,比如int initarray(int **array,int level);传入参数写成了initarray(&&head,0);有错误。。其实这个head动态分配malloc,直接用**来做 或许还好点吧。。
看到这道题目,以前做过。现在来复习一下吧:
首先用结构体 和 循环单链表来做,最简单:
View Code
int ALL=10; int out=3; int head[10][3]; //int head[ALL][3];//this is error? variable modified 'head' at file scope #define is_here 1 #define is_out 0 int i=0,j=0; int isover=1; int isLastFlag=0;//标志 int count=0; int last; void initarray(int level){ for(i=0;i<ALL;i++){ if(level==0){ head[i][0]=i+1; head[i][1]=is_here; head[i][2]=++j; if(j==out){ j=0; isLastFlag=1; } }else{ if(head[i][1]==is_here){ head[i][2]=++j; if(level==2){ i=ALL;last=0; }else{ if(j==out){ j=0; isLastFlag=1; } } } } } } int main(){ int is_here_num=ALL; initarray(0); while(isover){ for(i=0;i<ALL;i++){ if(head[i][1]==is_here) printf("%d %s %d \n",head[i][0],head[i][1]==is_here?"is_here":"is_out",head[i][2]); if(head[i][2]==out && head[i][1]==is_here){ head[i][1]=is_out; printf("I am %d, and i am out\n",head[i][0]); count++; if(count==ALL-1){//只剩下一个的时候 isover=0;i=ALL;break; } } } isLastFlag=0; initarray(1); if(isLastFlag==0){//if 剩余的小于 这个 out数字.继续循环直到j=out的时候 isLastFlag=2; last=1; while(last){ initarray(2); } } } for(i=0;i<ALL;i++){ if(head[i][1]==is_here) printf("The Last One is :%d\n",head[i][0]); } }
这个遇到的问题就是 如果是函数传递 二维数组的参数,有错误,比如int initarray(int **array,int level);传入参数写成了initarray(&&head,0);有错误。。其实这个head动态分配malloc,直接用**来做 或许还好点吧。。
相关文章推荐
- 前面二医大同学去火车站接女友前到我家弯了一圈,刚才一起出去的时候我发现外面超冷~
- n 个人围成一圈(编号1-n),数到3的出列,最后剩下的人的编号
- 文章标题n个人围成一圈,顺序排号。从第一个人开始报数(1~3),凡报到3的人退出圈子,问最后留下来的是原来几号的那位?
- C语言:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3),凡报到3的人退出圈子,问最后一个留下的是原来的第几号的那位?
- 20100706 学习记录:截取字符串最后一个字符 && asp textarea 多行数组分割处理
- 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出 列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所 有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺
- Codeforces 611D:New Year and Ancient Prophecy DP 分块记录最后一个
- n个人围成一圈,顺序排号,从第1个人开始报数(1到3报数),凡报到3的人退出圈子,问最后留下的是原来几号
- 有N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人。
- n个小朋友围成一个圈,从0开始编号,数到m-1的小朋友出列,下一个小朋友开始继续数数,直到最后一个小朋友出列
- 有n个人围成一圈,顺序排号,从第一个开始报数(从1-3报数),凡报道3的人退出,问最后留下来的人是原来的几号;
- js解决N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人的编号。
- yii2.0发送邮件发不出去问题记录
- * 假设有n个人围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列..... * 如此反复到所有人全部出列为止。设n个人的编号分别为1,2,3..
- 刚买的保时捷 出去遛了一圈 不敢跑太快!
- n 个人围成一圈(编号1-n),数到3的出列,最后剩下的人的编号
- 环形链表 有m个人围成一圈,开始报数,报道n,退出,问最后剩下的是几号。
- 有10(100人或者n个)个人围成一圈,从第一个人开始报数(报1、2、3),只要报3的人就出去, 然后不停的循环报数,直到最后剩下一个人,计算出这个人最开始的位置。其实就是约瑟夫环问题
- 有n个人围成一圈,顺序排号,从第一个开始报数(从1到3),报到3的退出,问最后留下的是几号
- 编程题目——n个人坐成一圈,从第一个人开始,每次数到3的离开圈子,请问留下的最后一个人是谁?