Zijeak 2018-10-04 03:03 采纳率: 33.3%
浏览 741
已采纳

求助,一道很简单的java/C编程题,想了很久还没有解决

如题

            二战后的某一天,N个日本人来到了一个山洞休息,为了派出一个日本人去外面充满危险的丛林中采摘食物,他们设置如下游戏产生外出采摘的人: 

1、首先,所有参加游戏的日本人按顺序编号为1、2、3…N;
2、接下来每个日本人心里产生一个数字,这个数字称为序号为 N的人的密码P;
3、所有参加游戏的人按照编号站成一个圈,长老为游戏设置初始密码K,从编号为 1的人开始报数,报到 K的人退出队伍,然后将自己心中的密码P说出来,由下一个人继续从 1开始报数,报到P的人退出队伍,以此类推;
4、当队伍中剩下一个人的时候,这个人就是今天要出去采摘的日本人,他可能回不来了!
请各位同学设计程序并使用Java语言实现改程序,在用户输入了人数N、每个人的密码P和初始密码K的情况下,自动完成上面的选择过程,输出先后离开队伍的人的序号序列,最后输出要去采摘的日本人,输出他的编号。

用java或者c都可以,表明解题步骤就行
谢谢各位大佬

  • 写回答

2条回答 默认 最新

  • JonathanYan 2018-10-04 06:01
    关注
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class JosephCircle {
    
        public int newJoseph(int n, int[] p, int k) {
            List<Integer> num = new ArrayList<Integer>();
            for( int i = 0; i < n; i++ ) num.add(i);
    
            int t = k, index = 0;
            for( int i = 0; i < n - 1; i++ ) {
                index = ( index + t ) % num.size();
                num.remove(index);
                t = p[index];
                if(index == num.size()) index=0;
            }
            return num.get(0)+1;
        }
    
        public int oldJoseph(int n, int k){
            int w = 0;
            for( int i = 2; i <= n; i++ ){
                w = (w+k)%i;
            }
            return w;
        }
    
        public static void main(String[] args) {
            JosephCircle jc = new JosephCircle();
            Scanner scan = new Scanner(System.in);
    
            int n,k;
            int[] p = new int[100];
            System.out.print("Enter N = ");n = scan.nextInt();
            System.out.print("Enter P[] = ");
            for(int i = 0; i < n; i++){
                p[i] = scan.nextInt();
            }
            System.out.print("Enter K = ");k = scan.nextInt();
            System.out.println();
            System.out.println("Survivor is No." + jc.newJoseph(n,p,k));
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵