导航:首页 > 编程语言 > java循环算法

java循环算法

发布时间:2022-05-30 11:36:01

java约瑟夫经典循环算法

下面是我用c#写的,其实原理都一样,楼主自己研究下吧

Console.WriteLine("请输入参与游戏的人数:");
int numPerson = int.Parse(Console.ReadLine());

Console.WriteLine("请输入游戏退出的规则数:");
int ruleNum = int.Parse(Console.ReadLine());

bool[] person = new bool[numPerson]; //定义每个人是否退出开关,默认为否
int callNum = 0; //报数
int total = 0; //记录已经退出的人数
int index = -1; //报数的循环游标

while (true) {

index++; //从第一个人开始
index %= numPerson; //确保数组不越界,当游标指向最后一个数组元素以后,从头开始

if (!person[index]) { //第index个人没有退出时,则进行报数

callNum++;
}
if (callNum == ruleNum) { //当第index个人报数的数字与规则数相同时,则开关打开,退出报数

person[index] = true;
total++; //退出的总人数更新
callNum = 0; //为下一个人报数更新数据
Console.WriteLine("玩家{0}退出",index+1);
}
if ((numPerson - total) == 1) { //当游戏玩家只剩下一个的时候结束游戏

for (int i = 0; i < person.Length; i++) {

if (person[i] == false) { // 判断退出开关依然是否的玩家

Console.WriteLine("最后剩下的玩家是第:{0}位",i + 1); //输出实际的玩家号
break;
}
}
break;
}
}

Ⅱ 求助,用Java写一个递归或者循环算法

packagecom.complaints;

importjava.util.ArrayList;
importjava.util.List;

importorg.junit.Test;

importcom.alibaba.fastjson.JSONArray;

publicclasstest{

privateList<MTS>org_list=newArrayList<MTS>();
privateList<MTS>final_list=newArrayList<MTS>();

publictest(){
MTSa=newMTS();
a.setId("1");
MTSb=newMTS();
b.setId("1.1");
MTSc=newMTS();
c.setId("1.1.1");
MTSd=newMTS();
d.setId("2");
MTSe=newMTS();
e.setId("2.1");
org_list.add(a);
org_list.add(b);
org_list.add(c);
org_list.add(d);
org_list.add(e);
}

@Test
publicvoidarrange(){
for(inti=0;i<org_list.size();i++){
Stringid=org_list.get(i).getId();
intcnt=id.split("\.").length;
Stringtar_string=id+".";
intchild_cnt=0;
for(intk=0;k<org_list.size();k++){
Stringchild_id=org_list.get(k).getId();
intz=child_id.indexOf(tar_string);
String[]aaa=child_id.split("\.");
inty=aaa.length-1;
if(z==0&&y==cnt){
this.addChild(org_list.get(i),org_list.get(k));
child_cnt++;
}
}
if(cnt==1&&child_cnt!=0){
final_list.add(org_list.get(i));
}
}
Stringjson=JSONArray.toJSONString(final_list);
System.out.println(json);
}

privatevoidaddChild(MTSparent,MTSchild){
List<MTS>childs=parent.getChildMTS();
if(childs==null){
childs=newArrayList<MTS>();
}
childs.add(child);
parent.setChildMTS(childs);
}
}

最后输出结果:[{"childMTS":[{"childMTS":[{"id":"1.1.1"}],"id":"1.1"}],"id":"1"},{"childMTS":[{"id":"2.1"}],"id":"2"}],应该是符合你需求的

Ⅲ JAVA代码如何循环计算定义的值

不断把值赋值给自己定义的变量就行了。
1、自定义一个变量
int self = 0;

2、通过for循环给self赋值for(int i=0;i<100;i++){ self = i;//for循环,从0到99,依次赋值给自定义变量self}

Ⅳ java中如何计算for循环的循环次数

如果是foreach,可以新建一个计数器。如果是for,使用i的就可以了。

1,foreach形式,代码如下:

List<String>list=newArrayList<String>();
intnum=0
for(Stringstring:list){
num=num+1;//每次循环加1.
}
System.out.println(num);

就可以得到循环次数。

2,for形式,代码如下

List<String>list=newArrayList<String>();
for(inti=0;i<list.size();i++){//list.size()就是循环的次数

}
System.out.println(list.size());

Ⅳ java十大算法

算法一:快速排序算法
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤:

1 从数列中挑出一个元素,称为 "基准"(pivot),

2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

算法二:堆排序算法
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤:

创建一个堆H[0..n-1]

把堆首(最大值)和堆尾互换

3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置

4. 重复步骤2,直到堆的尺寸为1

算法三:归并排序
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法步骤:

1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置

3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4. 重复步骤3直到某一指针达到序列尾

5. 将另一序列剩下的所有元素

Ⅵ java(for循环)有没有更简单的算法,比如直接算出来质数,不写第二个for循环

不写第二个for循环是不可能的(目前人类的数学而言)!除非你是已经把结果存在一个数组里,那就相当于已知答案求答案,也没有意义了。或者是用一个子函数代替了第二个for循环,或者用while之类的,那是钻牛角尖,本质上还是循环

因为还没有研究出任何的连续质数的准确的递推关系式,(有质数分布规律的关系式,但不是100%准确的)

所以,只能假设这个数可能是质数,再来求证。

不过你的程序可以做下列改进,大大加快执行速度:

第二个for循环:

for (int j = 2; j < i; j++) {

j不需要遍历到i-1,只要遍历到 根号i的向下取整就够了。因为:如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。这样一来时间复杂度有O(n^2)降低到O(n^1.5)

而且j也一样,可以直接从3开始除,j+=2。因为你i都已经是奇数了,i/2还要判断吗?

所以第二个for循环可以改为:

//sqrt_i如果不提前算好,把sqrt函数搞进第二个for循环去遍历,计算量会非常的大!其实还可以自己用乘法试乘来代替此语句,因为i是单调递增的,sqrt_i也必然是。
intsqrt_i=(int)sqrt((double)i);
for(intj=3;j<sqrt_i;j+=2){
//...

事实上,j不需要等于所有奇数,只要等于所有质数就行了,但搞质数的程序比较麻烦,而且该程序规模不大,没有必要。

Ⅶ java用循环编写一个计数程序输入几个数字直到输入0为止,计算输入的这些数的平均数

参考代码如下:

import java.util.*;

public class Main

{

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int sum = 0;

int count = 0;

while(true){

int num = sc.nextInt();

if(num == 0) break;

sum += num;

count++;

}

System.out.println("平均值:"+sum*1.0/count);

}

}

运行结果:

Ⅷ java排序算法for循环语句怎么理解请帮忙讲解下,

class Sortint_1 {
int i,j,k,temp;
void Sortint(int a1,inta2[]) { //传递参数 数组长度,数组对象{1,5,2,0}
for(i=0;i<a1-1;i++) { //从第一个元素开始遍历数组
k = i; //k和i同步
for(j=i+1;j<a1;j++) // j定位为第二个元素,开始内循环找到未排序中最小值
if(a2[j]<a2[k]) k=j; //如果在未排序中的元素有比当前K值小的,则将k置为较小元素的下标,始终保持k最小
if(k!=i) {
temp = a2[i];a2[i]=a2[k];a2[k]=temp; //遇到小值则i,k交换
}
}
}

总结:内层循环是为了寻找未排序中的元素的最小值;找到后在外层循环将值赋给i。具体怎么回事,你找一个数组自己走一遍就能理解了,这样印象也能更深刻

阅读全文

与java循环算法相关的资料

热点内容
陆上赛艇app怎么报名 浏览:110
app内页面的网址怎么提取 浏览:286
安卓升级包pkg文件如何打开 浏览:77
id3算法原理 浏览:602
骑手通app怎么输入不了保单号 浏览:988
82一56的筒便算法 浏览:404
数控机床fanuc编程 浏览:607
天刀mode不是内部或外部命令 浏览:854
长城c30压缩机价格 浏览:1000
java打开图片文件 浏览:409
跟程序员聊天聊到半夜 浏览:411
自己怎么做app代码 浏览:915
win7旗舰版进不去带命令符 浏览:799
单片机温度检测电路 浏览:802
拼图软件不压缩 浏览:656
红袖添香小说源码 浏览:624
erp加密工具在哪里买 浏览:516
怎么给qq群里的文件加密 浏览:762
androidsetbitmap 浏览:598
mt4反向编译 浏览:201