算法☞小结

  案例1:

package merrimin;
 
import java.util.ArrayList;
import java.util.List;
 
 
public class Josephus {
 
public static void main(String[] args) {
int num = 8; // 总人数
try {
Josephus jose = new Josephus();
List<Integer> list = new ArrayList<Integer>();
list.add(0);
 
for (int j = 1; j <= num; ++j) {
list.add(j);
}
jose.getPerson(list);
 
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
 
}
 
private int getPerson(List list) {
int index = 0; // 最后一个出列人的索引
for (int i = 1; i < list.size(); i++) {
// 点到的人出列
if (i % 4 == 0) {
list.remove(i);
}
index = i;
if (list.size() > 4) {
getPerson(list);
}
}
 
return index;
 
}
 
}
 
案例1.2:
package merrimin;
 
import java.util.Arrays;
 
public class King {
 
 
public static void main(String[] args)
{
  getPerson(8, 4);
}
public static void getPerson(int total,int num)
{
//定义一个数值true 表示未出列,false 表示已出列
   boolean []arr=new boolean[total];
   Arrays.fill(arr, true);
   
   //移动变量
   int next=1;
   
   //数组下标
   int index=0;
   
   //剩余人数
   int count=total;
   
   //若剩余人数为1,停止报数
   while(count>1)
   {
    if(arr[index]==true)
    {
    if(next==4)
    {
     arr[index]=false;
     
     //剩余人数减1
     --count;
     
     //启始量归一
     next=1;
     
     System.out.println("依次出列的人为:"+(index+1));
    }else
    {
    ++next;
    }
    }
    ++index;
    if(index==total)
    {
    //数组下标复位,从0开始遍历
    index=0;
   
    }
   }
   
   for(int i=0;i<total;++i)
   {
     if(arr[i]==true)
     {
     System.out.println("最后出列的人是:"+(i+1));
     }
   }
   
   
}
}
案例1.3
package merrimin;
 
import java.util.Arrays;
 
public class King {
 
 
public static void main(String[] args)
{
  getPerson(8, 4);
}
public static void getPerson(int total,int num)
{
//定义一个数值true 表示未出列,false 表示已出列
   boolean []arr=new boolean[total];
   Arrays.fill(arr, true);
   
   //移动变量
   int next=1;
   
   //数组下标
   int index=0;
   
   //剩余人数
   int count=total;
   
   //若剩余人数为1,停止报数
   while(count>1)
   {
    if(arr[index]==true)
    {
    if(next==4)
    {
     arr[index]=false;
     
     //剩余人数减1
     --count;
     
     //启始量归一
     next=1;
     
     System.out.println("依次出列的人为:"+(index+1));
    }else
    {
    ++next;
    }
    }
    ++index;
    if(index==total)
    {
    //数组下标复位,从0开始遍历
    index=0;
   
    }
   }
   
   for(int i=0;i<total;++i)
   {
     if(arr[i]==true)
     {
     System.out.println("最后出列的人是:"+(i+1));
     }
   }
   
   
}
}
案例2 Daffodil Numbers:
//import java.util.*;
 
public class Daffodil {
public static void main(String[] args) {
int hundred = 0;
int tens = 0;
int unit = 0;
        int n=3;
        
for (int i = 100; i<999; ++i) {
hundred = i / 100;
//tens = i % 100 / 10;
tens=(i-hundred*100)/10;
unit = i % 10;
if (Math.pow(hundred, n) + Math.pow(tens, n) + Math.pow(unit, n) == i) {
System.out.println(i + "是水仙花数\n");
}
}
 
}
 
}
案例3 Test 100 fowls with 100 yuan:
public class test {
 
public static void main(String[] args) {
int i = 0;
int j = 0;
int k = 0;
 
while (i <= 20) {
j = 0;
while (j <= 33) {
k =100-i-j;
if (k%3==0 && 5*i+3*j+k/3==100) {
System.out
.println("公鸡,母鸡,小鸡的数量分别是" + i + "," + j + "," + k);
}
j++;
}
i++;
}
 
}
 
}
案例4 BubbleSort:

import java.util.Scanner;

public class BubbleSort {
        
        // 排序方法(由大到小)
        
        public static void Sort(int[] arry){
                
                for(int i=arry.length-1;i>0;i--)
                {
        
                        for(int j=0;j<i;j++)
                        {
                                if(arry[i]>arry[j]) //如果后面的大于前面的 则交换顺序
                                {  
                                        int temp;  //相当于装满油的桶,和装满水的桶,互换的时候,需要一个空的桶。temp现在就是那个空桶
                                        temp=arry[i];
                                        arry[i]=arry[j];
                                        arry[j]=temp;
                
                                }
                        
                        }
                }
                System.out.println("排序结果为:"); //打印排序结果
                for(int i=0;i<arry.length;i++)
                {
                        System.out.print(arry[i]+",");
                }
        }
        
        
        
        public static void main(String[] args){
                
                int[] arry=new int[10];
                Scanner scan=new Scanner(System.in); //接收被排列数字
                System.out.println("请输入10个数...");
                
                for(int i=0;i<arry.length;i++){  //接收数字赋给数组
                        arry[i]=scan.nextInt();

                }       
                
                Sort(arry); //调用排列方法

        }
        
        
        

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章