水仙花数 完全数 相亲数
public class shuixianhua
{
public static void main(String args[]) {
for(int a=1;a<=9;a++) {
for(int b=0;b<=9;b++)
for(int c=0;c<=9;c++)
if(a*a*a+b*b*b+c*c*c==100*a+10*b+c)
System.out.println(100*a+10*b+c);
}
}
}
class wanquanshu{
public static void main(String[] args) {
for(int n=1;n<9999;n++)
if(n==divsum(n)) System.out.println(n);
}
public static int divsum(int n) {
int s=0;
for(int i=1;i<n;i++)
if(n%i==0)s+=i;
return s;
}
}
class xiang//你的约数加起来等我与 我的加起来等于你
{
public static void main(String[] args) {
for(int n=1;n<=9999;n++) {
int s=divsun(n);
if(n>s && divsun(s)==n)
System.out.println(n+","+s);
}
}
private static int divsun(int n) {
int s=0;
for(int i=1;i<n;i++)
if(n%i==0) s+=i;
return s;// TODO Auto-generated method stub
}
}
迭代就是用公式一次次逼近
递归 画一个树
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class CayleyTree extends JFrame{
public static void main(String []args) {
CayleyTree frm=new CayleyTree("CayleyTree");
frm.setVisible(true);
SwingUtilities.invokeLater(()->{
frm.init();
frm.drawTree(10,200,400,100,-Math.PI/2);
});
}
private Frame frm;//带有标题和边框的顶级窗口
private Graphics graphics;//图形类
private int width;
private int height;
private final double PI=Math.PI;
private final double th1=30*PI/180;
private final double th2=20*PI/180;
private final double per1=0.6;
private final double per2=0.7;
public CayleyTree(String title) {
super(title);
setSize(400,440);
setBackground(Color.lightGray);
//setDefaultCloseOperation(EXIT_ON_CLOSE);//注释掉移动的时候就不会关闭了
}
public void init() {
width=getSize().width;
height=getSize().height;
graphics=this.getGraphics();
}
void drawTree(int n,double x0,double y0,double leng,double th) {
if(n==0)return;
double x1=x0+leng*Math.cos(th);
double y1=y0+leng*Math.sin(th);
drawLine(x0,y0,x1,y1);
drawTree(n-1,x1,y1,per1*leng,th+th1);
drawTree(n-1,x1,y1,per2*leng,th-th2);
}
void drawLine(double x0,double y0,double x1,double y1) {
graphics.drawLine((int)x0,(int)y0,(int)x1,(int)y1);
}
}
回溯,八皇后问题
选择某一可能的线索进行试探,每一步试探都有多种方式,将每一方式都一一试探,如果不符合条件就返回纠正,反复进行这种试探再返回纠正,直到得出全部符合条件的答案或是问题无解
回溯法的基本模式 x++ if x--
public class EightQueen {
private int[] resultRange;
private int rangeNum=0;
public EightQueen(int num)
{
this.resultRange=new int[num];
}
public static void main(String[] args)
{
long startMillis=System.currentTimeMillis();
EightQueen eQueen=new EightQueen(8);
eQueen.rangeQueen(0);
long endMillis=System.currentTimeMillis();
System.out.println("共"+eQueen.rangeNum+"种方案");
System.out.println("共消耗时间:"+(endMillis-startMillis));
}
//回溯法-----放置皇后
private void rangeQueen(int num) {
if(num>=resultRange.length)
{
printResult();
rangeNum++;
return;
}
for(int i=0;i<resultRange.length;i++)
{
resultRange[num]=i;
if(checkQueen(num))
{
rangeQueen(num+1);//迭代求解
}
}
}
//检查是否存在同列或同斜线的皇后
private boolean checkQueen(int n) {
// TODO Auto-generated method stub
for(int i=0;i<n;i++)
{
if(resultRange[n]==resultRange[i] || Math.abs(n-i)==Math.abs(resultRange[n]-resultRange[i]))
{
return false;
}
}
return true;
}
//打印出每一种方案以及最终的方案数
private void printResult() {
System.out.println("第"+(rangeNum+1)+"种方案");
for(int i=0;i<resultRange.length;i++)
{
for(int j=0;j<resultRange.length;j++)
{
if(j==resultRange[i])
{
System.out.print("* ");
}
else {
System.out.print(0+" ");
}
}
System.out.println();
}
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
}