Coder Buct 1072: 数据结构作业(可选)-- 约瑟环问题
2014-08-06 10:49
351 查看
题目描述
将m个孩子从1到m编上号,按序号围坐成一个圈,从1号孩子开始数,每数到n时,被数到的孩子即离开圈子,然后从下一个孩子开始,再从1开始数,如此不断地数下去,只到只剩下最后一个孩子,问剩下的孩子是几号?
输入
输入为一组整数对,每个整数对占一行,整数对的第一个整数表示m,即孩子的个数,第二个整数表示n,即被数到n的孩子将离开。 0<m<10000, n>0 输入以0 0作为结束。
输出
每组整数对输出一个结果整数,每个输出占一行。 最后一行输入0 0不产生输出。
样例输入
8 35 20 0
样例输出
73/*NO.1 (O(n) )算法*/ #include <stdio.h> #include <math.h> int main() { int m, r; int i, j, s = 0; scanf("%d %d",&m, &r); for(i = 1; i <= m; i++) s = (s + r) % i; printf("%d\n",s + 1); return 0 ; } /*NO.2 数组模拟*/ #include <stdio.h> #include <stdlib.h> #define MAX 10001 /*利用:求余特性,(i+1)%m...*/ int main() { int a[MAX] = {0} ; int m, r, i, j, k, h; scanf("%d%d",&m, &r) ; k = 0; for(i = 1; i <= m; i++){ for(j = 0 ; ; ){ if(a[k] == 0){ j++; if(j < r) k = (k + 1) % m; else{ a[k] = 1; printf("%d\n",k+1); /*输出正解*/ if(i != m) k = (k + 1) % m; break; } } else k = (k+1) % m ; } } printf("%d\n",k+1) ; return 0 ; } /*NO.3循环链表模拟*/ #include <stdio.h> #include <stdlib.h> typedef struct list { int num; struct list *next; }LIST; int main() { LIST *head = NULL, *p, *q; long i, j, k, m, r; scanf("%ld%ld", &m, &r) ; if(m <= 1){ printf("1"); return 0; } /*建立循环链表*/ p = (LIST *)malloc (sizeof(LIST)); p->num = 1; p->next = NULL; head = p; q = p; for(i = 2; i <= m; i++){ p = (LIST *)malloc (sizeof(LIST)); p->num = i; p->next = NULL; q->next = p; q = p; } q->next = head ; /*将最后一个结点的指向头,这样就构成了循环链表*/ p = head ; while (q->next != q){ for(i = 1; i < r; i++){ q = p; p = p->next; } q->next = p->next ; p = q->next ; } printf("%d\n", p->num); return 0 ; }
相关文章推荐
- 数据结构作业串通配符匹配问题
- 数据结构作业 校园导航问题
- 数据结构作业之背包问题
- 数据结构作业 迷宫问题 模拟 之基础的BFS DFS
- 数据结构作业保存4-1约瑟夫环问题
- 数据结构大作业中遇到的问题及解决(一)
- 数据结构与问题求解(AS2描述)
- 数据结构中Catalan数用格路问题进行转化后的一种证明方法
- 数据结构问题---链表运算集合
- 经典问题12:数据结构基础 ---堆
- 数据结构作业稀疏矩阵三元组表示
- 数据结构问题集锦
- 数据结构问题---内部排序
- 数据结构问题---二叉树遍历
- 数据结构之一(引论及最大子序列和问题)
- 结构体数据对齐问题
- 【并查集】数据结构与算法实验题 11.2 病毒排查问题
- 数据结构课程设计:括号匹配问题(实现检验匹配并输出不匹配的位置)
- 数据结构问题---JOSEPHUS环解法
- 奥运场馆规划问题(数据结构解决)