- 浏览: 318967 次
- 性别:
- 来自: 西宁
文章分类
- 全部博客 (120)
- Java Thought (29)
- Java Pattern (4)
- Data Base (7)
- Algorithm Design (33)
- Linux (0)
- Mysql (2)
- Oracle (0)
- ConstructionDesign-架构 (5)
- Spring Platform (0)
- Tomcat (1)
- JavaScript (7)
- Web System (3)
- MS SQLServer (1)
- 软件哲学 (6)
- View (3)
- Java GUI (4)
- CSSDIV (7)
- CloudComputing (0)
- WebService (0)
- SystemOrProject (2)
- SOA (0)
- 互转共享 (3)
- 偶尔java习题 (0)
- Thinks with does (1)
最新评论
-
sassds:
佩服啊 高手
分享一款js特效 -
bhjackson:
学习啦,能否详细介绍下回溯的过程?O(∩_∩)O谢谢
分享回溯法- 找n个数中r个数的组合 -
zk7019311:
了解了解。。。。。
业务层代码复用的一点建议 -
lijie1819:
看到LZ的设计思想,感觉和抽象工厂模式有点相像。
业务层代码复用的一点建议 -
wjjcml1982:
酷毙了!楼主太强悍了!
分享一款js特效
1. 线程问题。
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2. 数字转化问题。
将一个键盘输入的数字转化成中文输出(例如:输入:1234567 输出:一百二拾三万四千五百六拾七)。
3. 全排列问题。
输出自然数1~n的所有不重复的排列, 即n的全排列。
4. 不全排列问题(不重复)。
给定n(1<=n<=500)以及待排列的n个元素。计算出这n个元素的所有不同排列。
比如
input: 4 aacc
output: aacc acac acca caac caca ccaa 6
5. 大整数问题。
编程求档N<=100时,N!的准确值。
6. n阶魔方阵问题。
n阶魔方是指这样一种方阵,它的每一行、每一列以及对角线上的各数之和为一个相同的常数.
编程求解n(n<=100)为奇数的魔方阵.
7. 填写运算符问题。
输入任意六个数x1,x2,x3,x4,x5和y,在前五个每相邻数之间填上一个运算符("+", "-", "*", "/")。使得计算出来的值等于y。
评论
11 楼
lj9799616
2010-06-13
public class Test extends Thread {
public static int j=0;
public static void main(String[] args) {
Test th=new Test();
Test th1=new Test();
Test1 th2=new Test1();
Test1 th3=new Test1();
th.start();
th1.start();
th2.start();
th3.start();
}
public void run() {
// TODO 自动生成方法存根
while (true){
j++;
System.out.println("-----"+j);
}
}
}
public class Test1 extends Thread {
// TODO 自动生成方法存根
public void run() {
// TODO 自动生成方法存根
while (true){
Test.j--;
System.out.println("****"+Test.j);
}
}
}
//4个线程问题分两个类实现的
10 楼
lj9799616
2010-06-13
package change;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Change {
private static int num=0;
private static int num1=0;
private static String str=null;
private static String str1="";
/**
*作者: lvjian
*时间:2010/6/13
*作用:将数字转换为汉字读出的形式
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println("请输入要转换的数:");
Scanner scan=new Scanner(System.in);
num=scan.nextInt();
str=num+"";
String [] center=new String[str.length()];
for(int i=0;i<str.length();i++)
{
num1=num%10;
if(num1==1)
{
center[i]="一"; //将数字转换为汉字
}else if(num1==2)
{
center[i]="二";
}else if(num1==3)
{
center[i]="三";
}else if(num1==4)
{
center[i]="四";
}else if(num1==5)
{
center[i]="五";
}else if(num1==6)
{
center[i]="六";
}else if(num1==7)
{ center[i]="七";
}else if(num1==8)
{ center[i]="八";
}else if(num1==9)
{
center[i]="九";
}else if(num1==0)
{ center[i]="零";
}
num=num/10;
}
for(int j=str.length()-1;j>=0;j--)
{
//附加的判断修正零万位等小问题
if(center[j].equals("零"))
{
if(!center[j-1].equals("零"))
{
if(j==4)
str1+="万"+center[j];
else
str1+=center[j];
}else if(j==4){
str1+="万";
}
continue;
}
//
//-------在此处可加十亿以上的数-------//
if(j==8)
{
str1+=center[j]+"亿";
}else if(j==7)
{
str1+=center[j]+"千";
}else if(j==6)
{
str1+=center[j]+"百";
}else if(j==5)
{
str1+=center[j]+"十";
}else if(j==4)
{ str1+=center[j]+"万";
}else if(j==3)
{ str1+=center[j]+"千";
}else if(j==2)
{ str1+=center[j]+"百";
}else if(j==1)
{ str1+=center[j]+"十";
}else if(j==0)
{ str1+=center[j];
}
// str1+=center[j];
}
System.out.println(" 结果为 : "+str1);
}
} //小数点部分及十亿以上的数逻辑其本相似不做赘述
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Change {
private static int num=0;
private static int num1=0;
private static String str=null;
private static String str1="";
/**
*作者: lvjian
*时间:2010/6/13
*作用:将数字转换为汉字读出的形式
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println("请输入要转换的数:");
Scanner scan=new Scanner(System.in);
num=scan.nextInt();
str=num+"";
String [] center=new String[str.length()];
for(int i=0;i<str.length();i++)
{
num1=num%10;
if(num1==1)
{
center[i]="一"; //将数字转换为汉字
}else if(num1==2)
{
center[i]="二";
}else if(num1==3)
{
center[i]="三";
}else if(num1==4)
{
center[i]="四";
}else if(num1==5)
{
center[i]="五";
}else if(num1==6)
{
center[i]="六";
}else if(num1==7)
{ center[i]="七";
}else if(num1==8)
{ center[i]="八";
}else if(num1==9)
{
center[i]="九";
}else if(num1==0)
{ center[i]="零";
}
num=num/10;
}
for(int j=str.length()-1;j>=0;j--)
{
//附加的判断修正零万位等小问题
if(center[j].equals("零"))
{
if(!center[j-1].equals("零"))
{
if(j==4)
str1+="万"+center[j];
else
str1+=center[j];
}else if(j==4){
str1+="万";
}
continue;
}
//
//-------在此处可加十亿以上的数-------//
if(j==8)
{
str1+=center[j]+"亿";
}else if(j==7)
{
str1+=center[j]+"千";
}else if(j==6)
{
str1+=center[j]+"百";
}else if(j==5)
{
str1+=center[j]+"十";
}else if(j==4)
{ str1+=center[j]+"万";
}else if(j==3)
{ str1+=center[j]+"千";
}else if(j==2)
{ str1+=center[j]+"百";
}else if(j==1)
{ str1+=center[j]+"十";
}else if(j==0)
{ str1+=center[j];
}
// str1+=center[j];
}
System.out.println(" 结果为 : "+str1);
}
} //小数点部分及十亿以上的数逻辑其本相似不做赘述
9 楼
x1387420
2010-06-08
其实是要花点时间做的,不知道高手做这个花多长时间?
8 楼
laoas
2010-06-08
学习,小弟才学编程
7 楼
andy54321
2010-06-08
每次看都有不清楚的
什么时候真正senior啊
什么时候真正senior啊
6 楼
shuiguozheng
2010-06-07
游客飘过!!!!
5 楼
jihui1988
2010-06-07
刚上来就看到啦 非常好 非常适合我 感谢楼主
4 楼
maozj
2010-06-07
4. 不全排列问题(不重复)。
输出:
a a c c
a c a c
a c c a
c a a c
c a c a
c c a a
s = 6
package abstractandlogic; /** * 4. 不全排列问题(不重复)。 给定n(1<=n<=500)以及待排列的n个元素。计算出这n个元素的所有不同排列。 比如 input: 4 aacc * output: aacc acac acca caac caca ccaa 6 * * @sincejdk1.6 * @author 毛正吉 * @version 1.0 * @date 2010.06.07 * */ public class NAllUniqueArray { /** * @param args */ public static void main(String[] args) { char[] ch = "aacc".toCharArray(); NAllUniqueArray nua = new NAllUniqueArray(ch); nua.backtrace(1); int s = nua.getS(); System.out.println("s = " + s); } private char[] ch; // 向量空间 private int n; // 长度 private int s; // 总数 /** * 构造方法 * * @param _ch */ public NAllUniqueArray(char[] _ch) { int len = _ch.length; n = len; ch = new char[len + 1]; for (int i = 1; i <= len; i++) { ch[i] = _ch[i - 1]; } s = 0; } /** * 回溯搜索 * * @param t */ public void backtrace(int t) { if (t == n) { output(); } else { for (int j = t; j <= n; j++) { if (checkUnique(t, j)) { swap(t, j); backtrace(t + 1); // 回溯 swap(t, j); } } } } /** * 检查唯一性 * * @param t * @param j * @return */ public boolean checkUnique(int t, int j) { for (int i = t; i < j; i++) { if (ch[i] == ch[j]) { return false; } } return true; } /** * 交换 * * @param t * @param j */ private void swap(int t, int j) { char temp = ch[t]; ch[t] = ch[j]; ch[j] = temp; } /** * 输出 */ private void output() { for (int i = 1; i <= n; i++) { System.out.print(ch[i] + " "); } System.out.println(""); s++; } /** * 获得总数s * * @return */ public int getS() { return s; } }
输出:
a a c c
a c a c
a c c a
c a a c
c a c a
c c a a
s = 6
3 楼
yxk67
2010-06-07
import java.text.DecimalFormat;
/**
*
* 项目名称:PMS
* 类名称:ChnAmt
* 类描述:数字转化为中文
* 创建人:Owner
* 创建时间:2009-8-3 上午09:44:13
* 修改人:Owner
* 修改时间:2009-8-3 上午09:44:13
* 修改备注:
* @version
*
*/
public class DataConvert {
private String[] saChnAmount = new String[50];
private int iArrayLen = 0;
private int iArrayPos = 0;
/**
*
* 创建一个新的实例 DataConvert(构造-小写金额转换大写对象(不带参)).
*
* @param sAmount
*/
public DataConvert(String sAmount) {
int iDecFrac = 0;
if (sAmount.indexOf(".") != -1) {
iDecFrac = sAmount.length() - sAmount.indexOf(".");
if (iDecFrac > 3) {
iDecFrac = 3;
}
sAmount = sAmount.substring(0, sAmount.indexOf("."))+ sAmount.substring(sAmount.indexOf(".") + 1, sAmount.indexOf(".")+ iDecFrac);
for (; iDecFrac < 3; iDecFrac++) {
sAmount += "0";
}
} else {
sAmount += "00";
}
toChnAmt(sAmount, 2, false);
}
/**
*
* 创建一个新的实例 DataConvert(构造-小写金额转换大写对象(带参)).
*
* @param sAmount
* @param iDec
* @param bDot
*/
public DataConvert(String sAmount, int iDec, boolean bDot) {
if (bDot) {
if (sAmount.indexOf(".") < 0) {
// 没有小数点
sAmount += ".";
for (int iFor = iDec; iFor > 0; iFor--) {
sAmount += "0";
}
} else {
int iDecLen = sAmount.length() - sAmount.indexOf(".") - 1;
if (iDecLen > iDec) {
// 去位
sAmount = sAmount.substring(0, sAmount.indexOf(".") + iDec
+ 1);
} else if (iDecLen < iDec) {
// 补零
for (int iFor = iDec - iDecLen; iFor > 0; iFor--) {
sAmount += "0";
}
}
}
}
toChnAmt(sAmount, iDec, bDot);
}
/**
*
* toChnAmt(小写金额转换大写)
* @param sAmount
* @param iDec
* @param bDot
* @return void
* @since CodingExample Ver(编码范例查看) 1.1
*/
public void toChnAmt( String sAmount, int iDec, boolean bDot ) {
// 数字
final String [] sUserCode = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
// 单位
final String [] sChnUnit = { "厘","分","角","元","十","百","千","万","十","百","千","亿","十","百","千","万"};
// 整
final String sSpecEnd = "整";
// 标志
// '9'代表十
// '3' - '元', '1' - '万'( 如遇前一生成字符为'亿',则不生成'万' ), '3' - '亿'
// '0' - 其他
final byte [] byFlag = { 0, 0, 0, 3, 9, 0, 0, 1, 9, 0, 0, 3, 9, 0, 0, 0 };
int iCounter, iPos;
byte byPreFlag=-1;
char cDigit, cPreDigit=' ';
iArrayLen = 0;
switch ( iDec ) {
// 补零
case 0:
sAmount += "0";
case 1:
sAmount += "0";
case 2:
sAmount += "0";
case 3:
break;
default:
sAmount = sAmount.substring(0,sAmount.length()-iDec + 3) ;
}
if ( bDot ) {
// 转换小数点
sAmount = sAmount.substring(0,sAmount.length()-4 ) + sAmount.substring(sAmount.length()-3 );
}
// 开始转换
for( iCounter=sAmount.length() ; iCounter>0; iCounter--)
{
// 计算数字位置
iPos = sAmount.length() - iCounter;
// 获得数字字符
cDigit = sAmount.charAt(iPos);
// 过滤数字
if ( cDigit<'0' || cDigit>'9' ) cDigit = '0';
if ( cDigit != '0' ) {
// 当前数字不为'0'
if ( cPreDigit == '0' ) {
// 前一数字为'0'
if ( byPreFlag != 3 && byPreFlag != 1 ) {
// '亿','万','元' 后不加 '零'
saChnAmount[ ++iArrayLen ] = sUserCode[ 0 ];
}
}
if ( cDigit =='1' && byFlag[iCounter-1] == 9 && iArrayLen == 0 ) {
// 数字为'1',单位为'十',且为第一个数字时,不报'1',只报'十'
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
} else {
// 生成数字
saChnAmount[ ++iArrayLen ] = sUserCode[ Character.digit( cDigit, 10 ) ];
// 生成单位
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
// 记录当前位标志
byPreFlag = byFlag[iCounter-1];
}
} else {
// 数字为'0'
if ( iArrayLen == 0 ) {
// 过滤首位'0'
continue;
} else {
if ( byFlag[iCounter-1] == 3 || ( byFlag[iCounter-1]==1 && byPreFlag!=3 && !saChnAmount[ iArrayLen ].equals( sChnUnit[ 11 ] ) ) ) {
// 生成'亿','万','元'的单位,但如果从'千万'位到'万'位都为0,则不生成'万'
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
}
// 记录当前位标志
byPreFlag = byFlag[iCounter-1];
}
}
// 记录当前数字
cPreDigit = cDigit;
}
if ( iArrayLen == 0 ) {
// 转换结束数组长度为0,生成'0元整'
saChnAmount[ ++iArrayLen ] = sUserCode[ 0 ];
saChnAmount[ ++iArrayLen ] = sChnUnit[ 3 ];
saChnAmount[ ++iArrayLen ] = sSpecEnd;
}
if ( saChnAmount[ iArrayLen ].equals( sChnUnit[ 3 ] ) ) {
// 最后位为'元',加上'整'
saChnAmount[ ++iArrayLen ] = sSpecEnd;
}
}
/**
*
* next(判断是否还有下一个转换元素)
* @return String DOM对象
* @since CodingExample Ver(编码范例查看) 1.1
*/
public boolean next() {
boolean bRtn = false;
if (iArrayPos++ < iArrayLen) {
bRtn = true;
}
return bRtn;
}
/**
*
* getResult(获取当前转换元素)
* @return String
* @since CodingExample Ver(编码范例查看) 1.1
*/
public String getResult() {
String sRtn = "";
sRtn = saChnAmount[iArrayPos];
return sRtn;
}
/**
*
* DoubleToString(转换double到String型)
* @param dMoney
* @return String
* @since CodingExample Ver(编码范例查看) 1.1
*/
public static String DoubleToString(double dMoney) {
String sMoney = "";
DecimalFormat df = new DecimalFormat("############.###");
try {
sMoney = df.format(dMoney);
} catch (Exception e) {
sMoney = "";
}
return sMoney;
}
/**
*
* getChinaData(字符串形式的数字大写取得)
* @param data
* @return String 返回数字的大写中文读法
* @since CodingExample Ver(编码范例查看) 1.1
*/
public static String getChinaData(String data){
StringBuffer sb = new StringBuffer();
DataConvert chnAMT;
chnAMT = new DataConvert(data);
while (chnAMT.next()) {
sb.append(chnAMT.getResult());
}
return sb.toString();
}
public static void main(String[] str) {
System.out.println(DataConvert.getChinaData("8744.11"));
}
}
/**
*
* 项目名称:PMS
* 类名称:ChnAmt
* 类描述:数字转化为中文
* 创建人:Owner
* 创建时间:2009-8-3 上午09:44:13
* 修改人:Owner
* 修改时间:2009-8-3 上午09:44:13
* 修改备注:
* @version
*
*/
public class DataConvert {
private String[] saChnAmount = new String[50];
private int iArrayLen = 0;
private int iArrayPos = 0;
/**
*
* 创建一个新的实例 DataConvert(构造-小写金额转换大写对象(不带参)).
*
* @param sAmount
*/
public DataConvert(String sAmount) {
int iDecFrac = 0;
if (sAmount.indexOf(".") != -1) {
iDecFrac = sAmount.length() - sAmount.indexOf(".");
if (iDecFrac > 3) {
iDecFrac = 3;
}
sAmount = sAmount.substring(0, sAmount.indexOf("."))+ sAmount.substring(sAmount.indexOf(".") + 1, sAmount.indexOf(".")+ iDecFrac);
for (; iDecFrac < 3; iDecFrac++) {
sAmount += "0";
}
} else {
sAmount += "00";
}
toChnAmt(sAmount, 2, false);
}
/**
*
* 创建一个新的实例 DataConvert(构造-小写金额转换大写对象(带参)).
*
* @param sAmount
* @param iDec
* @param bDot
*/
public DataConvert(String sAmount, int iDec, boolean bDot) {
if (bDot) {
if (sAmount.indexOf(".") < 0) {
// 没有小数点
sAmount += ".";
for (int iFor = iDec; iFor > 0; iFor--) {
sAmount += "0";
}
} else {
int iDecLen = sAmount.length() - sAmount.indexOf(".") - 1;
if (iDecLen > iDec) {
// 去位
sAmount = sAmount.substring(0, sAmount.indexOf(".") + iDec
+ 1);
} else if (iDecLen < iDec) {
// 补零
for (int iFor = iDec - iDecLen; iFor > 0; iFor--) {
sAmount += "0";
}
}
}
}
toChnAmt(sAmount, iDec, bDot);
}
/**
*
* toChnAmt(小写金额转换大写)
* @param sAmount
* @param iDec
* @param bDot
* @return void
* @since CodingExample Ver(编码范例查看) 1.1
*/
public void toChnAmt( String sAmount, int iDec, boolean bDot ) {
// 数字
final String [] sUserCode = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
// 单位
final String [] sChnUnit = { "厘","分","角","元","十","百","千","万","十","百","千","亿","十","百","千","万"};
// 整
final String sSpecEnd = "整";
// 标志
// '9'代表十
// '3' - '元', '1' - '万'( 如遇前一生成字符为'亿',则不生成'万' ), '3' - '亿'
// '0' - 其他
final byte [] byFlag = { 0, 0, 0, 3, 9, 0, 0, 1, 9, 0, 0, 3, 9, 0, 0, 0 };
int iCounter, iPos;
byte byPreFlag=-1;
char cDigit, cPreDigit=' ';
iArrayLen = 0;
switch ( iDec ) {
// 补零
case 0:
sAmount += "0";
case 1:
sAmount += "0";
case 2:
sAmount += "0";
case 3:
break;
default:
sAmount = sAmount.substring(0,sAmount.length()-iDec + 3) ;
}
if ( bDot ) {
// 转换小数点
sAmount = sAmount.substring(0,sAmount.length()-4 ) + sAmount.substring(sAmount.length()-3 );
}
// 开始转换
for( iCounter=sAmount.length() ; iCounter>0; iCounter--)
{
// 计算数字位置
iPos = sAmount.length() - iCounter;
// 获得数字字符
cDigit = sAmount.charAt(iPos);
// 过滤数字
if ( cDigit<'0' || cDigit>'9' ) cDigit = '0';
if ( cDigit != '0' ) {
// 当前数字不为'0'
if ( cPreDigit == '0' ) {
// 前一数字为'0'
if ( byPreFlag != 3 && byPreFlag != 1 ) {
// '亿','万','元' 后不加 '零'
saChnAmount[ ++iArrayLen ] = sUserCode[ 0 ];
}
}
if ( cDigit =='1' && byFlag[iCounter-1] == 9 && iArrayLen == 0 ) {
// 数字为'1',单位为'十',且为第一个数字时,不报'1',只报'十'
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
} else {
// 生成数字
saChnAmount[ ++iArrayLen ] = sUserCode[ Character.digit( cDigit, 10 ) ];
// 生成单位
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
// 记录当前位标志
byPreFlag = byFlag[iCounter-1];
}
} else {
// 数字为'0'
if ( iArrayLen == 0 ) {
// 过滤首位'0'
continue;
} else {
if ( byFlag[iCounter-1] == 3 || ( byFlag[iCounter-1]==1 && byPreFlag!=3 && !saChnAmount[ iArrayLen ].equals( sChnUnit[ 11 ] ) ) ) {
// 生成'亿','万','元'的单位,但如果从'千万'位到'万'位都为0,则不生成'万'
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
}
// 记录当前位标志
byPreFlag = byFlag[iCounter-1];
}
}
// 记录当前数字
cPreDigit = cDigit;
}
if ( iArrayLen == 0 ) {
// 转换结束数组长度为0,生成'0元整'
saChnAmount[ ++iArrayLen ] = sUserCode[ 0 ];
saChnAmount[ ++iArrayLen ] = sChnUnit[ 3 ];
saChnAmount[ ++iArrayLen ] = sSpecEnd;
}
if ( saChnAmount[ iArrayLen ].equals( sChnUnit[ 3 ] ) ) {
// 最后位为'元',加上'整'
saChnAmount[ ++iArrayLen ] = sSpecEnd;
}
}
/**
*
* next(判断是否还有下一个转换元素)
* @return String DOM对象
* @since CodingExample Ver(编码范例查看) 1.1
*/
public boolean next() {
boolean bRtn = false;
if (iArrayPos++ < iArrayLen) {
bRtn = true;
}
return bRtn;
}
/**
*
* getResult(获取当前转换元素)
* @return String
* @since CodingExample Ver(编码范例查看) 1.1
*/
public String getResult() {
String sRtn = "";
sRtn = saChnAmount[iArrayPos];
return sRtn;
}
/**
*
* DoubleToString(转换double到String型)
* @param dMoney
* @return String
* @since CodingExample Ver(编码范例查看) 1.1
*/
public static String DoubleToString(double dMoney) {
String sMoney = "";
DecimalFormat df = new DecimalFormat("############.###");
try {
sMoney = df.format(dMoney);
} catch (Exception e) {
sMoney = "";
}
return sMoney;
}
/**
*
* getChinaData(字符串形式的数字大写取得)
* @param data
* @return String 返回数字的大写中文读法
* @since CodingExample Ver(编码范例查看) 1.1
*/
public static String getChinaData(String data){
StringBuffer sb = new StringBuffer();
DataConvert chnAMT;
chnAMT = new DataConvert(data);
while (chnAMT.next()) {
sb.append(chnAMT.getResult());
}
return sb.toString();
}
public static void main(String[] str) {
System.out.println(DataConvert.getChinaData("8744.11"));
}
}
2 楼
maozj
2010-06-07
3. 全排列问题。
package abstractandlogic; /** * 3. 全排列问题。 输出自然数1~n的所有不重复的排列, 即n的全排列。 * * @sincejdk1.6 * @author 毛正吉 * @version 1.0 * @date 2010.06.07 * */ public class NAllArray { /** * @param args */ public static void main(String[] args) { int n = 6; NAllArray na = new NAllArray(n); na.backtrace(1); // 回溯搜索输出n的全排列 int s = na.getS(); System.out.println("s = " + s); } private int n; // 整数n private int[] a; // n的全排列解空间 private int s; // 总数 /** * 构造 * * @param _n */ public NAllArray(int _n) { n = _n; a = new int[n + 1]; a[0] = 0; for (int i = 1; i <= n; i++) { a[i] = i; } s = 0; } /** * 回溯搜索 * * @param t */ public void backtrace(int t) { if (t == n) { output(); } else { for (int j = t; j <= n; j++) { swap(t, j); backtrace(t + 1); // 回溯 swap(t, j); } } } /** * 交换 * * @param t * @param j */ private void swap(int t, int j) { int temp = a[t]; a[t] = a[j]; a[j] = temp; } /** * 输出 */ private void output() { for (int i = 1; i <= n; i++) { System.out.print(a[i] + " "); } System.out.println(""); s++; } /** * 获得总数s * * @return */ public int getS() { return s; } }
1 楼
maozj
2010-06-07
1. 线程问题。
package thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 1. 线程问题。 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 * * @sincejdk1.6 * @author 毛正吉 * @version 1.0 * @date 2010.06.07 * */ public class ThreadIJTest { /** * @param args */ public static void main(String[] args) { ThreadIJTest tij = new ThreadIJTest(); ExecutorService exec = Executors.newCachedThreadPool(); for (int i = 0; i < 2; i++) { exec.execute(tij.getIncRunner()); // 执行j++ exec.execute(tij.getDecRunner()); // 执行j-- } exec.shutdown(); } private int j; // 变量j /** * j++ */ private synchronized void incJ() { j++; System.out.println(Thread.currentThread().getName() + " inc " + j); } /** * j-- */ private synchronized void decJ() { j--; System.out.println(Thread.currentThread().getName() + " dec " + j); } /** * 内部类:j++线程 * * @author 毛正吉 * */ private class IncRunner implements Runnable { public void run() { for (int i = 0; i < 100; i++) { incJ(); } } } /** * 内部类:j++线程 * * @author 毛正吉 * */ private class DecRunner implements Runnable { public void run() { for (int i = 0; i < 100; i++) { decJ(); } } } /** * 获得内部加线程 * * @return */ public Runnable getIncRunner() { return new IncRunner(); } /** * 获得内部减线程 * * @return */ public Runnable getDecRunner() { return new DecRunner(); } }
发表评论
-
开散列的简单模拟(一)
2010-06-28 08:33 17781. 散列 散列有两种 ... -
递归和动态规划构造两个字符序列的最长公共字符子序列
2010-06-28 08:28 4460应je朋友要求,所以翻开以前的算法题目,整理了以下,给 ... -
最大公约数的应用 - 分享
2010-06-25 08:08 17811.先看一家大公司笔试题 数组中有n个数据,要将它们顺 ... -
信息数字化解逻辑题分享
2010-06-21 08:09 12211. 前提条件: 将逻辑题目中的信息用数字化描述。 ... -
递归算法分析-分享
2010-06-19 16:09 15241. 深入认识递归 (1) 递 ... -
非递归算法分析实例分享
2010-06-18 15:47 10131 仅仅依赖于问题规模的时间复杂度 (1) 例1: 交换i和 ... -
NP完全性问题
2010-06-18 14:02 6966在学习算法设计与分析时,经常会提到NP完全性问题,到底 ... -
算法分析精述分享
2010-06-18 12:03 8201. 算法分析的评价体系 评价算法的三条主要标准是: ... -
贪婪策略算法的总结分享
2010-06-11 08:30 59711. 贪婪算法描述 贪婪算法又叫登山法,它的根本思想是 ... -
带权有向图 - 边上权值非负情形的单源最短路径问题
2010-06-07 08:57 26341. 问题描述: 给定 ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)四
2010-06-07 08:54 132221. 工作分配问题。 ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)三
2010-06-07 08:53 105017. 字符统计问题。 编写一个算法,统计在一个输入 ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)二
2010-06-07 08:47 13248. 数字迷问题。 A B C ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)
2010-06-07 08:37 18351. 线程问题。 设计 ... -
Java快速排序算法整理(二)
2010-05-31 14:04 1008package boke.sort; /** * 快 ... -
Java快速排序算法整理(一)
2010-05-31 13:39 629package boke.sort; /** * 快 ... -
Java最小堆实现
2010-05-31 08:29 58041.堆结点 package boke.heap1; /* ... -
Java插入排序代码整理
2010-05-28 14:44 1212package boke.sort; /** * 插 ... -
Java选择排序代码整理
2010-05-28 14:37 1478package boke.sort; /** * 选 ... -
Java冒泡排序代码整理
2010-05-28 14:26 1929Java冒泡排序代码整理: package boke.sor ...
相关推荐
PHPWind dodostyle模板
DODO研究所-NFT 全景解析|历史、当下和未来
PHP整站打包程序-By DoDo 小巧、快捷、推荐!
林dodo.zip
Dodo_apktool.zip
任务/待办事项保存我在代码中如何称呼它们的简单待办事项和“任务”是DoDo的一项功能。 一些简单的文本,带有用于将项目标记为已完成的复选框,一个编辑按钮和一个删除按钮。 所有这些都将显示在列表中。 每个任务的...
因为安卓系统是开源的所以给我们自己个性化手机带来了很大的便利。不需要进行复杂的破解等操作甚至只需要几个简单的小软件我们就可以制作一个属于自己的ROM。下面这个就是apk文件的反编译工具和签名工具
DODO:流动性比未拆单高10倍 什么是DODO? :writing_hand: DODO基于全新的做市商算法,其基本思想是风险中立,以保持流动性提供者的投资组合稳定。 与AMM相比,DODO的流动性要好10倍。 谁审核DODO? 是一家领先...
一块锁屏主题,很漂亮的相信大家一定会喜欢的
DoDo(兜兜)截屏缩放大师(豪华版)[V 7.0.0 免费]。 1、此版免费。 2、支持捐助。 详细介绍: 中国辽宁大连,鑫信软件全力打造的,经典大众软件之一。简单的说,就是截屏大师和缩放大师二合一软件。 ...
DoDo(兜兜)录音摄像大师(豪华版)。 1、此号版本免费。 2、支持购买捐助。 详细介绍: 中国辽宁大连,鑫信软件全力打造的,经典大众软件之一。简单的说,就是录音大师和摄像大师二合一软件 目前...
android反编译工具,带UI界面,可签名
dodo.js Javascript游戏引擎 Dodo.js是一个新生的轻量级(<500K)javascript游戏引擎。 该框架依赖 Underscore.js,“有用的函数式编程助手” PIXI用于图形处理 ... 但是,它可以很容易地扩展到中等规模的项目。
注释使您可以使用样式和颜色(例如, Dodo.Ansi用于ANSI图形)标记文档树的一部分。 不使用注释的Doc可以使用类型变量或Void 。 构造和操作Doc的最原始方法是通过text和Monoid 。 import Prelude import Dodo ( ...
渡渡鸟
Dodo APK Tools(Android程序反编译器)绿色版 老外写的《android-apktool》软件,可以帮助我们把APK反编译,生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译...
待办事项后端 DoDo的服务器端代码-您的任务和时间管理器!
python库。资源全名:dodo-0.1.tar.gz
dodo:小技巧和任务
动物内容聚合站The DoDo:将萌宠进行到底.docx