永发信息网

Java数组逻辑问题求思路

答案:4  悬赏:70  手机版
解决时间 2021-05-05 03:02
给个长度为65的数组从1开始编号,然后从1开始数,数到4的倍数就退出,从1不停的数,直到剩下最后一个人时就返回这个编号。求解
最佳答案

楼主只是问了这样一个问题,我不知道楼主的水平怎样,所以我用最通俗的语言去解释吧,希望你能看懂。


这是个经典的约瑟夫环问题,有很多种做法,可以用链表解决,或者是数组法,还可以用数学方法。具体你可以百度搜搜,不过看题目,你说的是数组,就用数组做吧,我认为,数组虽然运行效率不高,但是如果对刚接触这种题型的人来说,是可以非常好的培养思维能力的。因为它是模拟整个游戏过程,相对好理解。


这道题,最重要的一句话就是“从1开始数,数到4的倍数就退出”数到4的倍数退出,可以理解为,从1开始数数,数到4的人退出,然后下面一个人接着从1开始数,以此类推。这样想比较好理解。


这样,把这个过程分成了两个部分,一个部分是从1到3数数,另一个部分是,数到4的人退出。用代码怎么写呢?定义一个计数器cnt1,用来表示数数。此时,重点就是,要有个判断条件,满足什么什么条件的人数数(cnt1++),满足什么什么条件的人离开,并且从下个人重新开始数数,计数器清0(cnt1=0)。接下来的问题是,65个人,数完这65个人得又重头开始数,如果做一个for循环for(i=1;i<=65;i++)当第65个人报数的时候,满足这个条件的话i=1表示重新开始数数。因为有了这个条件,此程序此时变成了一个死循环,所以要再加个结束条件,就是再定义一个计数器cnt2,每当有人离开,计数器加1,cnt2==62的时候,break。这样就行了。好,下面代码。(注意是我是用C语言编写的,虽然我也学过JAVA,但是语法什么的都忘了,JAVA和C++很像的,都差不多)


#include<stdio.h>
void main(){
int i;
int cnt1=1;//从1开始数数
int cnt2=0;
int a[63];
for(i=1;i<=63;i++)
a[i-1]=i;//把数组标个号。
for(i=1;i<=63;i++)
{
if(cnt1<4 && a[i-1]>0)//在这个条件里,什么样的人才能够继续数数?一个就是还没有数到4的人cnt1<4,和没有退出游戏的人a[i-1]>0。
cnt1++;
else if(cnt1==4 &&a[i-1]>0)//什么样的人才能够退出?数数数到4的人cnt1==4和没有退出游戏的人a[i-1]>0,这个很好理解吧?
{
a[i-1]=0;//把退出游戏的人值赋为0,表示退出比赛了,
cnt1=1;//计数器清0,表示重新数数。
cnt2++;//计数器2实际上是个控制条件。
}
if(i==63)//如果数到63,则从头开始数
    i=0;//这里说下,为什么i=0,而不是=1,因为,当循环for(i=1;i<=63;i++)重新开始,在for()内,已经定义了i=1,程序会自动给i加上1.
   if(cnt2==62)//当计数器2也就是控制条件=62的时候,即游戏只剩下一个人的时候,游戏结束
    break;
  }
for(i=0;i<63;i++)
if(a[i]!=0)
printf("%d",a[i]);//输出最后剩下的那个人。
}

全部回答

public class Test {  public static void main(String args[]){   int n = 10;   int m = 3;   int s = 0;   for(int i=2; i<=n; i++){    s = (s+m)%i;

  }   System.out.println("最后剩下的位置为: "+(s+1));  }

}

int[] arr=new int[65];

int n=0;//退出的人数

for(int i=0;i<65;i++)

{

arr[i]=i+1;

}

for(int i=0;n<65;i++)

{

if(i%4==0)

{

arr[n]=0;

n++;

}

}

for(int i=0;i<65;i++)

{

if(arr[i]!=0)

System.Out.print(arr[i]);

}

主要代码:

for(int i=0;i<a[].length;i++){

    a[i]=i+1;

    while(a[i]>0){

    if(a[i]%4==0){

    a[i]=-1;

    continute;

    }

    }

代码不全  提供思路!!!!!!!

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
**对身体有坏处吗?那么它是个好行为还是坏行
人生苦短,为什么有太多的不如意和辛酸
我想免费得一套Q秀、谁愿送?
学生办动感地带的卡哪种套餐好?
推介几首好听的英文歌曲!
昨晚12点他打电话给我,说喝多了,能来找我吗
不能正常进牧场
地下城与勇士游戏登录不上去
锦盈超市我想知道这个在什么地方
迟来父亲节的祝福语言,如何DIY父亲节贺卡方法
什么是E-R模型?
为什么电脑始终都检测不到U盾???
DNF东三为什么44以后的频道进不去啊 (不是爆
泡泡是如何存在的?
请问黄瓜能吃吗
推荐资讯
翻译:老师说:“一年有12个月”
路由器在接一个路由器怎么设置密码
只知网名不知帐号,怎么找他
真心相爱的两个人 可不可以 应不应该指出对方
韩国萨德事件什么意思,中韩萨德事件是怎么回
一个人到他女恋人的房间里最怕看见一副谁的照
求GBA玉如意攻略!(要文字不要发网址)!!
爱之星母婴护理地址在什么地方,想过去办事
圈内乡卫生院地址在哪,我要去那里办事
做好人好还是做坏人好?坏人不是指犯罪的那种
诺基亚和索尼爱立信哪个好
爱情败给了金钱的句子,有关友情比金钱重要的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?