第一范文网 - 专业文章范例文档资料分享平台

JAVA经典算法50题(20)

来源:用户分享 时间:2021-06-02 本文由吃货未泯 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

ntln();

for(int i=0;i<m;i++){
brr[i]=arr[n-m+i];
}
for(int i=0;i<n-m;i++){
arr[m+i]=arr[i];
}
for(int i=0;i<m;i++){
arr[i]=brr[i];
}

System.out.println("排序后:");
for(int i=0;i<n;i++){
System.out.print(arr[i]+" ");
}
}
}

【程序37】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
(约瑟夫环问题,百度百科有时间复杂度最简单的数学方法)
原例代码:
import java.util.Scanner;
public class Demo37 {
public static void main(String[] args) {
System.out.println("请输人数n:");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
boolean[] arr = new boolean[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = true; //下标为TRUE时说明还在圈里
}
int leftCount = n;
int countNum = 0;
int index = 0;
while (leftCount > 1) {
if (arr[index] == true) { //当在圈里时
countNum++; //报数递加
if (countNum == 3) { //报数为3时
countNum = 0; //从零开始继续报数
arr[index] = false; //此人退出圈子
leftCount--; //剩余人数减一
}
}
index++; //每报一次数,下标加一
if (index == n) { //是循环数数,当下标大于n时,说明已经数了一圈,
index = 0; //将下标设为零重新开始。
}
}
for (int i = 0; i < n; i++) {
if (arr[i] == true) {
System.out.println(i);
}
}
}
}
个人代码1:
import java.util.Scanner;
public class Demo37 {
public static void main(String[] args) {
System.out.println("请输入人数:");
Scanner in = new Scanner(System.in);
int[] a = new int[in.nextInt()];
for (int i = 0; i < a.length; i++) {
a[i] = 1;
}
int left = a.length;
int j = 0;
int num = 0;
while (left > 1) {
if (a[j] == 1) {
num++;
}
if (num == 3) {
a[j] = 0;
num = 0;
left--;
}
j++;
if (j == a.length) {
j = 0;
}
}
for (int i = 0; i < a.length; i++) {
if (a[i] == 1) {
System.out.println("最后留下的人是"+ (i + 1) + "号");
break;
}
}
}
}
个人代码2:
import java.util.LinkedList;
import java.util.Scanner;
public class Demo37 {
public static void main(String[] args) {
LinkedList<Integer> l = new LinkedList<Integer>();
System.out.println("请输入人数:");
Scanner in = new Scanner(System.in);
int len = in.nextInt();
for (int i = 0; i < len; i++) {
l.add(i + 1);
}
int sum = 0;
int temp = 0;
for (int i = 0; sum != len - 1;) {
if (l.get(i) != 0) {
temp++;
}
if (temp == 3) {
l.remove(i);
l.add(i, 0);
temp = 0;
sum+
+;
}
i++;
if (i == l.size()) {
i = 0;
}
}
for (int t : l) {
if (t != 0) {
System.out.println("最后留下的人是" + t + "号");

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新高等教育JAVA经典算法50题(20)全文阅读和word下载服务。

JAVA经典算法50题(20).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1205420.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top