一道算法题

nicholasmars 2009-01-04 03:47:39
有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号?
不限语言

...全文
129 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiejieguita 2009-01-04
  • 打赏
  • 举报
回复

用j2me写的,最后一个是10号
int [] people = new int[17];
int lastPeople = 0;
public void getTheLastPeople(){
for(int i = 0; i < people.length; i++){
people[i] = i+1;
}
int count = 0;
int countLast = 0;
int j = 0;
while(true){
for(j = 0; j < people.length; j++){
if(people[j] != 0){
count++;
people[j] = count;
System.out.println("people[" + j + "] = " + people[j]);
if (people[j] % 3 == 0) {
people[j] = 0;
countLast++;
if(countLast == 17){
lastPeople = j;
return;
}
}
}
}
}
}
lore_home 2009-01-04
  • 打赏
  • 举报
回复


struct person{
int number;
person *prior;
person *next;
}

用又向链表把17人的信息存起来,把表头传入

void OutArray(person *head){
int i=0;
person *tp=NULL;
person *cp=head;
while(cp->next!=cp){
if(i==3 && cp->next!=cp){
tp=cp->next;
cp->prior->next=cp->next;
cp->next->prior=cp->prior;
cp=tp;
i=0;
}
else{
i++;
cp=cp->next;
}
}

cout<<cp->number;
}
iamy_china 2009-01-04
  • 打赏
  • 举报
回复
这个叫海盗问题。自己搜索海盗问题算法就好。
zdyguilong 2009-01-04
  • 打赏
  • 举报
回复
这个好像不难吧?3的倍数的置一个特殊的值,再轮到这个值的时候,做判断跳过,直到最后

不知道这个行不行。
nicholasmars 2009-01-04
  • 打赏
  • 举报
回复
呵呵,不是作业题
jcyan 2009-01-04
  • 打赏
  • 举报
回复
作业题自己做

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧