前几篇都是运用了循环单链表的知识解决该问题(
http://blog.itpub.net/29876893/viewspace-1815055/
,
http://blog.itpub.net/29876893/viewspace-1850077/,http://blog.itpub.net/29876893/viewspace-1851818/),下面
用循环数组来解决该问题。运用的解题思路和第三篇类似,给元素设置
标识,退出循环的条件就是被标识的元素总数=学生总数。下面给出代码:
运行结果:
上面给出的只是解题思路,希望有 抛砖引玉的作用, 相信读者还有更好的算法。当然该程序有更多的功能可以完善,其中涉及到一些细节给出了简单的注释。
点击(此处)折叠或打开
- #include<iostream>
- #define MAX_SIZE 10
- using namespace std;
- int j,flag,q,sizeA;
- char lastone;
- void searchnote(char *,int);
- void searchnote(char *A, int n) {
- cout << "出队的顺序依次是:" << endl;
- for (int i = 0;i<=sizeA;i++){ //扫描数组
-
- if (i == sizeA) { //如果循环整个数组后,则取余,构成循环数组
- i%=sizeA;
- }
- if(A[i] == NULL) {
- continue;
- }
- q++;
- if (q == n) { //若q等于间隔数n,则此时A[i]就是被标识的元素,且q置为0
- cout << A[i]<< " ";
- flag++;
- if (flag == sizeA) { //该步骤是为了打印最后一个同学编号,否则最后一个同学别标识为NULL
- lastone = A[i];
- }
- A[i] = NULL;
- q = 0;
- }
- if (flag == sizeA) { //循环退出条件
- cout << endl;
- cout << "获胜的同学是:" << endl;
- cout << lastone;
- break;
- }
- }
- }
-
- int main() {
-
- cout << "请输入同学的编号:" << endl;
- char note[MAX_SIZE];
- for (char ch; cin >>ch, j++) { //构建数组
- note[j] = ch;
- cout << note[j] << " ";
- sizeA++;
- }
- cout << endl;
- searchnote(note, 4);
- cout << endl;
- }
上面给出的只是解题思路,希望有 抛砖引玉的作用, 相信读者还有更好的算法。当然该程序有更多的功能可以完善,其中涉及到一些细节给出了简单的注释。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29876893/viewspace-1853008/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29876893/viewspace-1853008/