10个学生编号1-10围坐一圈,1-3报数,报3的退出,求最后剩下的是谁?
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]; }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。