开发者社区> 问答> 正文

10个学生编号1-10围坐一圈,1-3报数,报3的退出,求最后剩下的是谁?

10个学生编号1-10围坐一圈,1-3报数,报3的退出,求最后剩下的是谁?

展开
收起
a123456678 2016-03-23 16:09:49 2213 0
1 条回答
写回答
取消 提交回答
  • C语言版:

    #include "stdio.h"//
    #include "stdlib.h"//
    void main(void){
    
    int *p,n,s,i,j,k;
    printf("How many people?\nn=");
    scanf("%d",&n);
    if(!(p=(int *)malloc(n*sizeof(int)))){
    printf("Application memory failure...\n");
    return;
    }
    for(i=0;i<n;p[i]=1+i++);
    printf("Count off to?\ns=");
    scanf("%d",&s);
    for(i=j=k=0;;i++){//
    if(i==n) i=0;
    if(!p[i]) continue;
    if(++j==s){
    p[i]=j=0;
    if(++k==n) break;
    }
    }
    printf("The last one is: %d.\n",i+1);
    free(p);
    
    }
    
    java语言版
    
    public static void joseph(boolean[] array) {
    for (int i = 0; i < array.length; i++) {
    array[i] = true;
    }
    
        int counter = 0;// 计数器
        int leftCount = array.length;// 剩余人数
        int index = 0;// 索引
    
        while (leftCount > 1) {
            if (array[index]) {
                counter++;
                if (counter == 3) {
                    counter = 0;
                    array[index] = false;
                    leftCount--;
                }
            }
            index++;
            if (index == array.length) {
                index = 0;
            }
        }
    
        for (int i = 0; i < array.length; i++) {
            if (array[i]) {
                System.out.println("剩余人员的位置是" + (i + 1));
            }
        }
    }
    
    public static void main(String[] args) {
        boolean[] array = new boolean[10];
        joseph(array);
    }
    
        C++版
        #include <iostream>
    using namespace std;
    
    void Solution1(int *arr, int length, int m);
    
    int main() {
    int arr[10] = {0,1,2,3,4,5,6,7,8,9};
    int m = 5;
    
    Solution1(arr,10,m);
    return 0;
    }
    
    /*
    
    simulate the process */ void Solution1(int *arr, int length, int m){ int i = 0; int index = length; int mIndex = m; while(index>1){ mIndex = m; while(mIndex > 0){ if(arr[i] != -1){ mIndex--; if(mIndex == 0) arr[i] = -1; } i = (i+1)%length; } index--; } for(i=0;i<length;i++) if(arr[i] != -1) cout<<arr[i]; }
    2019-07-17 19:11:26
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载