重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这是我应聘时写的算法代码,运行成功:
创新互联建站专业为企业提供洛江网站建设、洛江做网站、洛江网站设计、洛江网站制作等企业网站建设、网页设计与制作、洛江企业网站模板建站服务,十年洛江做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
//这是用java编写的一个求2的平方根的程序,精确度可通过修改weishu参数来改变
public class app
{ //用二分法求2的平方根
public static void main(String args[])
{
int a[],b[],s[],d[],c[],ss[];
int i,j,k;
a=new int[1000];
b=new int[1000];
s=new int[1000];
d=new int[1000];
c=new int[1000];
ss=new int[1000];
boolean jingque;
jingque=true;
a[0]=b[0]=2;
a[2]=b[2]=1;
a[1]=4;
b[1]=5;
int weishu=200;//定义循环次数
for(i=0;i1000;i++)
s[i]=0;
for(k=0;kweishu;k++)
{
hanshucheng.cheng(b,b,s);
j=s[0];
while (s[j]=2)
{
hanshuadd.add(a,b,c);
hanshuchu.chu(d,c);
hanshucopy.copy(ss,b);
hanshucopy.copy(b,d);
hanshucheng.cheng(b,b,s);
j=s[0];
// for(i=0;i=s[0];i++)
//System.out.println("s["+i+"]="+s[i]);
}
hanshucopy.copy(a,b);
hanshucopy.copy(b,ss);
}
for(i=a[0];i=1;i--)
System.out.print(a[i]);
System.out.print("左边计算到"+a[0]+"位\n");
for(i=b[0];i=1;i--)
System.out.print(b[i]);
System.out.print("右边计算到"+b[0]+"位\n");
for(i=a[0],j=b[0];jingque==true;i--,j--)
if(a[i]==b[j])
System.out.print(a[i]);
else
jingque=false;
System.out.print("精确到"+(a[0]-i-1)+"位\n");
}
}
class hanshucheng
{
public static void cheng( int a[],int b[],int s[])//定义两数相乘的函数
{
int flag=0,flag1=0;
int number=b[0];
int c[]=new int[1000];
int i,j,k,u;
for(int i1=0;i11000;i1++)
s[i1]=0;
for(i=1;i=number;i++)
{
for(int i1=0;i11000;i1++)
c[i1]=0;
for(j=i,k=1;jnumber+i;j++,k++)
{
c[j]=(a[k]*b[i]+flag)%10;
flag=(a[k]*b[i]+flag)/10;
}
if (flag!=0)
{
c[j]=flag;
flag=0;
j=j+1;
}
c[0]=j-1;
//for(k=1;k=c[0];k++)
//System.out.println("c="+c[k]);
for(k=1;k=c[0];k++)
{ u=s[k];
s[k]=(u+c[k]+flag1)%10;
flag1=(u+c[k]+flag1)/10;
}
if(flag1!=0)
{
s[k]=flag1;
k=k+1;
flag1=0;
}
s[0]=k-1;
// for(k=0;k=s[0];k++)
//System.out.println(s[k]);
}
}
}
class hanshuadd
{
public static void add(int a[],int b[],int c[])//定义两数相加的函数
{
int flag=0;int i,j,k;
int a1[]=new int[1000];
for(i=1;i=b[0];i++)
a1[i]=0;
for(j=b[0]-a[0]+1,k=1;j=b[0];j++,k++)
a1[j]=a[k];
//for(k=0;k=j;k++)
//System.out.println("a1="+a1[k]);
for(i=1;i=b[0];i++)
{
c[i]=(a1[i]+b[i]+flag)%10;
flag=(a1[i]+b[i]+flag)/10;
}
if(flag!=0)
{
c[i]=flag;
i=i+1;
flag=0;
}
c[0]=i-1;
}
}
class hanshuchu
{
public static void chu(int d[],int a[])//定义任一数除以2的函数
{
int flag=0,i;
for(i=a[0];i=1;i--)
{
d[i+1]=(flag*10+a[i])/2;
flag=(flag*10+a[i])%2;
}
if(flag!=0)
d[1]=5;
if(d[1]==0)
for(i=1;i=a[0]+1;i++)
d[i]=d[i+1];
d[i]=0;
d[0]=a[0]+1;
}
}
class hanshucopy
{
public static void copy(int a[],int b[])//定义
{
int i;
for(i=0;i=b[0];i++)
a[i]=b[i];
while (i1000)
a[i++]=0;
}
}
看完你的,自己写了一个。很简陋。你的改动比较大。一时半会改不了。
你的写好了。改动有点大。鼠标事件mousePressed()中实现移动。由于时间没做优化,主要处理方法是判断当前listenerPanel的上下左右是否存在上面是0的listenerPanel,存在则交换上面数字及背景颜色。自己可以优化下里面代码,
思路:
PuzzleTile jb = (PuzzleTile) e.getSource();
for(int i=0;ilistenerPanel.length;i++){
if(jb.equals(listenerPanel[i])){
//判断当前listenerPanel[i]上下左右是否存有listenerPanel的上面数字是0的,如果存在
则把当前的listenerPanel[i]的背景颜色及数字与上面是0 的交换。判断周围是否存在有点及是否交换有点复杂。
}
}
代码修改如下:少量注释
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import javax.swing.*;
public class PuzzleTile extends JPanel{
private String tileNumber;
public PuzzleTile(int number) {
super();
if (number == 0) {
this.setBackground(Color.white);
}
else {
this.setBackground(Color.darkGray);
}
this.tileNumber = "" + number;
}
public void setTitleNumber(int tileNumber){//设置上面的数字
this.tileNumber=tileNumber+"";
}
public int getTitleNumber(){//获得上面的数字
return Integer.parseInt(tileNumber);
}
public void paintComponent(Graphics graphics) {
Font a=new Font("Arial",Font.BOLD,30);
graphics.setFont(a);
graphics.setColor(Color.white);
super.paintComponent(graphics);
FontMetrics b=graphics.getFontMetrics(a);
int c=b.stringWidth(tileNumber);
int d=b.getAscent();
int e=getWidth()/2-c/2;
int f=getHeight()/2+d/2;
graphics.drawString(tileNumber,e,f);
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Random;
public class SlidingPuzzle extends JFrame implements MouseListener
{
public static void main(String[] args){
SlidingPuzzle frame=new SlidingPuzzle();
frame.TestPanel();
frame.setTitle("Numeric Sliding Puzzle");
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
PuzzleTile[] listenerPanel;
public void TestPanel(){
Container container=getContentPane();
container.setLayout(new GridLayout(3,3,5,5));
listenerPanel=new PuzzleTile[9];
ArrayListInteger myList=new ArrayListInteger();
int m;
for(int i=0;i9;i++){
m=new Random().nextInt(9);
if(!myList.contains(m))
myList.add(m);
else
i--;
}
for(int i=0;ilistenerPanel.length;i++){
listenerPanel[i]=new PuzzleTile(myList.get(i));
container.add(listenerPanel[i]);
listenerPanel[i].addMouseListener(this);
}
}
public void mousePressed(MouseEvent e){
PuzzleTile jb = (PuzzleTile) e.getSource();
int m=jb.getTitleNumber();
//依次判断每一个listenerPanel上下左右是否存在上面数字为0的listenerPanel
if(jb.equals(listenerPanel[0])){
if(listenerPanel[1].getTitleNumber()==0){
listenerPanel[0].setBackground(Color.white);
listenerPanel[0].setTitleNumber(0);
listenerPanel[1].setTitleNumber(m);
listenerPanel[1].setBackground(Color.darkGray);
}
if(listenerPanel[3].getTitleNumber()==0){
listenerPanel[0].setBackground(Color.white);
listenerPanel[0].setTitleNumber(0);
listenerPanel[3].setTitleNumber(m);
listenerPanel[3].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[1])){
if(listenerPanel[0].getTitleNumber()==0){
listenerPanel[1].setBackground(Color.white);
listenerPanel[1].setTitleNumber(0);
listenerPanel[0].setTitleNumber(m);
listenerPanel[0].setBackground(Color.darkGray);
}
if(listenerPanel[2].getTitleNumber()==0){
listenerPanel[1].setBackground(Color.white);
listenerPanel[1].setTitleNumber(0);
listenerPanel[2].setTitleNumber(m);
listenerPanel[2].setBackground(Color.darkGray);
}
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[1].setBackground(Color.white);
listenerPanel[1].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[2])){
if(listenerPanel[1].getTitleNumber()==0){
listenerPanel[2].setBackground(Color.white);
listenerPanel[2].setTitleNumber(0);
listenerPanel[1].setTitleNumber(m);
listenerPanel[1].setBackground(Color.darkGray);
}
if(listenerPanel[5].getTitleNumber()==0){
listenerPanel[2].setBackground(Color.white);
listenerPanel[2].setTitleNumber(0);
listenerPanel[5].setTitleNumber(m);
listenerPanel[5].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[3])){
if(listenerPanel[0].getTitleNumber()==0){
listenerPanel[3].setBackground(Color.white);
listenerPanel[3].setTitleNumber(0);
listenerPanel[0].setTitleNumber(m);
listenerPanel[0].setBackground(Color.darkGray);
}
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[3].setBackground(Color.white);
listenerPanel[3].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
if(listenerPanel[6].getTitleNumber()==0){
listenerPanel[3].setBackground(Color.white);
listenerPanel[3].setTitleNumber(0);
listenerPanel[6].setTitleNumber(m);
listenerPanel[6].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[4])){
if(listenerPanel[1].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[1].setTitleNumber(m);
listenerPanel[1].setBackground(Color.darkGray);
}
if(listenerPanel[7].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[7].setTitleNumber(m);
listenerPanel[7].setBackground(Color.darkGray);
}
if(listenerPanel[3].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[3].setTitleNumber(m);
listenerPanel[3].setBackground(Color.darkGray);
}
if(listenerPanel[5].getTitleNumber()==0){
listenerPanel[4].setBackground(Color.white);
listenerPanel[4].setTitleNumber(0);
listenerPanel[5].setTitleNumber(m);
listenerPanel[5].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[5])){
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[5].setBackground(Color.white);
listenerPanel[5].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
if(listenerPanel[2].getTitleNumber()==0){
listenerPanel[5].setBackground(Color.white);
listenerPanel[5].setTitleNumber(0);
listenerPanel[2].setTitleNumber(m);
listenerPanel[2].setBackground(Color.darkGray);
}
if(listenerPanel[8].getTitleNumber()==0){
listenerPanel[5].setBackground(Color.white);
listenerPanel[5].setTitleNumber(0);
listenerPanel[8].setTitleNumber(m);
listenerPanel[8].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[6])){
if(listenerPanel[3].getTitleNumber()==0){
listenerPanel[6].setBackground(Color.white);
listenerPanel[6].setTitleNumber(0);
listenerPanel[3].setTitleNumber(m);
listenerPanel[3].setBackground(Color.darkGray);
}
if(listenerPanel[7].getTitleNumber()==0){
listenerPanel[6].setBackground(Color.white);
listenerPanel[6].setTitleNumber(0);
listenerPanel[7].setTitleNumber(m);
listenerPanel[7].setBackground(Color.darkGray);
}
}else if(jb.equals(listenerPanel[7])){
if(listenerPanel[6].getTitleNumber()==0){
listenerPanel[7].setBackground(Color.white);
listenerPanel[7].setTitleNumber(0);
listenerPanel[6].setTitleNumber(m);
listenerPanel[6].setBackground(Color.darkGray);
}
if(listenerPanel[8].getTitleNumber()==0){
listenerPanel[7].setBackground(Color.white);
listenerPanel[7].setTitleNumber(0);
listenerPanel[8].setTitleNumber(m);
listenerPanel[8].setBackground(Color.darkGray);
}
if(listenerPanel[4].getTitleNumber()==0){
listenerPanel[7].setBackground(Color.white);
listenerPanel[7].setTitleNumber(0);
listenerPanel[4].setTitleNumber(m);
listenerPanel[4].setBackground(Color.darkGray);
}
}else {
if(listenerPanel[5].getTitleNumber()==0){
listenerPanel[8].setBackground(Color.white);
listenerPanel[8].setTitleNumber(0);
listenerPanel[5].setTitleNumber(m);
listenerPanel[5].setBackground(Color.darkGray);
}
if(listenerPanel[7].getTitleNumber()==0){
listenerPanel[8].setBackground(Color.white);
listenerPanel[8].setTitleNumber(0);
listenerPanel[7].setTitleNumber(m);
listenerPanel[7].setBackground(Color.darkGray);
}
}
boolean b=true;//是否完成标记
for(int i=0;ilistenerPanel.length;i++){//判断listenerPanel[0]~listenerPanel[8]上的数字是从0~8.若是完成拼图
if(listenerPanel[i].getTitleNumber()!=i)
b=false;
}
if(b==true){
int i=JOptionPane.showConfirmDialog(null, "would you paly agin?");
if(i==0){
if(i==0){
Rectangle re=this.getBounds();
this.dispose();
SlidingPuzzle slidingPuzzle=new SlidingPuzzle();
slidingPuzzle.setBounds(re);
}
else if(i==1)
System.exit(0);
else ;
}
}
}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
}
如果运行过程什么问题追问或者hi
package huda.laogao.ON_20121216;
import java.util.*;
public class GetEquation {
ArrayListInteger params = null;// 进行加减的数,长度设为n
int result = 0;// 结果
public GetEquation(ArrayListInteger params, int result) {
this.params = params;
this.result = result;
}
public void run() {
int size = params.size();
if (size == 1) {
if (params.get(0) == result)
System.out.println(result + "=" + result);
else
System.out.println("Invalid");
return;
}
int[][] matrix = getMatrix(size - 1);
int m = matrix.length;// 行数
int count = 0;// 记录符合结果的组合数
for (int i = 0; i m; i++) {
int now = params.get(0);// 进行加减的结果,初始为第一个值
// 从第二个数开始进行加或减,加的话就相当于该数乘上1,然后加到结果上,
// 减的就相当于该数乘上-1,然后加到结果上
for (int j = 1; j size; j++) {
now += matrix[i][j - 1] * params.get(j);
}
// System.out.println(now);
// 判断结果
if (now == result) {
count++;// 组合数加1
System.out.print(params.get(0));
for (int j = 1; j size; j++) {
if (matrix[i][j - 1] == 1)
System.out.print("+" + params.get(j));
else
System.out.print("-" + params.get(j));
}// for j
System.out.println("=" + result);
}// if
}// for i
if (count == 0)
System.out.println("Invalid");
}
public int[][] getMatrix(int n) {
int m = (int) Math.pow(2, n);
int matrix[][] = new int[m][n];
for (int i = 0; i n; i++) {
int num = (int) Math.pow(2, i + 1);
// 总共分 2^(i+1)块,如i=0,即该矩阵的第一列,可分为2块,上一块取1,下一块取-1
int size = (int) Math.pow(2, n - i - 1);
// 每块的大小为2^(n-i-1),如n=3,i=0,每块的大小为4,即前4个为1,后4个为-1
int flag = 1;// 先为+
for (int j = 0; j num; j++) {
for (int k = 0; k size; k++) {
matrix[k + j * size][i] = flag;
}
flag *= -1;
}
}
return matrix;
}
public void print(int[][] matrix) {
for (int i = 0; i matrix.length; i++) {
for (int j = 0; j matrix[i].length; j++) {
System.out.print(matrix[i][j] + "\t");
}
System.out.println();
}
}
public static void main(String args[]) {
ArrayListInteger params = new ArrayListInteger();
params.add(1);
params.add(2);
params.add(3);
params.add(4);
int result = 10;
GetEquation ge = new GetEquation(params, result);
ge.run();
}
}
运行结果为:1+2+3+4=10
注:难点为获取加减矩阵,可辅助print()函数帮助理解
望采纳