java中的一些编程题目

1,递归,实现全排列,不许有重复(字母或数字中含有相同字符)(主要是增加了判断两个数是否需要交换,是否需要以它为基准排列)

2,把一个数组里的数组合全部列出,比如1,和2组合列出来为:1,2,12,21(java版本和c++版本)

3,正则表达式(字符串的匹配)

4,  九 宫格的输出



1,递归,实现全排列,不许有重复(字母或数字中含有相同字符)

public class Allrange {
 
static void perm(int a[],int k,int m)
{
if(k>=m)
{
for(int i=0;i<=k;i++)
System.out.print(a[i]);
System.out.println();
return;
}

for(int i=k;i<=m;i++)
{  
int j;
for(j=k;j<i;j++)
{
if(a[j]==a[i])
break;
}
if(j<i) continue;

swap(a,i,k);
perm(a,k+1,m);
swap(a,i,k);
}
}

static void swap(int a[],int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}


public static void main(String args[])
{
int a[]=new int[]{1,2,2};
perm(a,0,a.length-1);
}

}

2.c++版本

//将一个数组中的字符的全部组合列出,1,2列出来为 1,2,21,12
#include<iostream>
#include<string>
using namespace std;


void AllList(string ss,string pre)
{


cout<<pre<<endl;


for(int i=0;i<ss.size();i++)
{

string temp=ss;
temp.erase(i,1);
AllList(temp,pre+ss[i]);
}
}


void main()
{
string ss;
cin>>ss;
AllList(ss,"");
}


java版本

import java.lang.*;
import java.util.*;




public class p74 {
 public static void main(String args[])
 {
String []array=new String[]{"1","2","3"};
listAll(Arrays.asList(array),"");
 }
 
 public static void listAll(List candidate,String pre)
 {
System.out.println(pre);
 
for(int i=0;i<candidate.size();i++)
{
List temp=new LinkedList(candidate);
listAll(temp,pre+temp.remove(i));
}
 }
}

3

在含有字母和数字的字符串中,找出所有的数字组成的字符串,



public class p188 {
  static String s="32fdsfd8fds0fdsf9323k32k";
  public static void main(String[] args)
  {
 String a=s.replaceAll("[^0-9]", "");
 System.out.println(a);
  }
}


4,先介绍一下九宫格(一个比较特别的方阵)

(1)抽象成计算机语言就是:在一个n*n的矩阵中填入1~n*n的数字(n必须为奇数),使得每一行、每一列、对角线的累加和都相等。

(2)思路:

A:  把 1 放在最后一行的中间

B: 每次向右下角走一步,然后出现了各种情况

  1)如果下(行)出界了,就在最上面对应行位置填入下一个数字

  2)如果右(列)出界了,就在最左边对应列的位置填入下一个数字

 3)如果该位置没有出界,且已经填入了数字,就在没走这一步之前的那个位置的同一列的上一行填入下一个数字

还有一种版本的九宫格是跟这种思路相同,但是方向不同的。(如,1 放在第0行的中间,向右下角走改为向左上角走)


import java.util.Scanner;;
public class nine {
public static void main(String args[]){
int n;

//输入n值
do{
System.out.println("n必须是奇数:");
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
}while(n%2==0);

//开始设置方阵的值
int arry[][]=new int[n][n];
int row=n-1,col=n/2;
arry[row][col]=1;

for(int i=2;i<=n*n;i++)
{
row=row+1;
col=col+1;
if(row>=n)   //是否下出界
row=0;
if(col>=n)   //是否右出界
col=0;
if(arry[row][col]==0)
arry[row][col]=i;
else
{  
row=(row-1+n)%n-1;   //还原为原来元素的上一行
col=(col-1+n)%n;        //还原为原来元素的同一列
arry[row][col]=i;
}
}

//输出方阵的值
for(int m=0;m<n;m++)
{ for(int k=0;k<n;k++)
{ System.out.print(arry[m][k]+"\t");    
}
  System.out.println();
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值