- 浏览: 326051 次
- 性别:
- 来自: 西宁
文章分类
- 全部博客 (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 18291. 散列 散列有两种 ... -
递归和动态规划构造两个字符序列的最长公共字符子序列
2010-06-28 08:28 4499应je朋友要求,所以翻开以前的算法题目,整理了以下,给 ... -
最大公约数的应用 - 分享
2010-06-25 08:08 18621.先看一家大公司笔试题 数组中有n个数据,要将它们顺 ... -
信息数字化解逻辑题分享
2010-06-21 08:09 12641. 前提条件: 将逻辑题目中的信息用数字化描述。 ... -
递归算法分析-分享
2010-06-19 16:09 16111. 深入认识递归 (1) 递 ... -
非递归算法分析实例分享
2010-06-18 15:47 10591 仅仅依赖于问题规模的时间复杂度 (1) 例1: 交换i和 ... -
NP完全性问题
2010-06-18 14:02 7027在学习算法设计与分析时,经常会提到NP完全性问题,到底 ... -
算法分析精述分享
2010-06-18 12:03 8811. 算法分析的评价体系 评价算法的三条主要标准是: ... -
贪婪策略算法的总结分享
2010-06-11 08:30 61021. 贪婪算法描述 贪婪算法又叫登山法,它的根本思想是 ... -
带权有向图 - 边上权值非负情形的单源最短路径问题
2010-06-07 08:57 26911. 问题描述: 给定 ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)四
2010-06-07 08:54 137521. 工作分配问题。 ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)三
2010-06-07 08:53 110617. 字符统计问题。 编写一个算法,统计在一个输入 ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)二
2010-06-07 08:47 13828. 数字迷问题。 A B C ... -
是否很久没抽象和逻辑了呢? DODO它吧(很基础)
2010-06-07 08:37 18951. 线程问题。 设计 ... -
Java快速排序算法整理(二)
2010-05-31 14:04 1036package boke.sort; /** * 快 ... -
Java快速排序算法整理(一)
2010-05-31 13:39 662package boke.sort; /** * 快 ... -
Java最小堆实现
2010-05-31 08:29 58631.堆结点 package boke.heap1; /* ... -
Java插入排序代码整理
2010-05-28 14:44 1261package boke.sort; /** * 插 ... -
Java选择排序代码整理
2010-05-28 14:37 1519package boke.sort; /** * 选 ... -
Java冒泡排序代码整理
2010-05-28 14:26 1983Java冒泡排序代码整理: package boke.sor ...
相关推荐
PHPWind dodostyle模板是专为PHPWind论坛系统设计的一款界面风格模板,它极大地提升了用户在网站上的视觉体验和交互性。PHPWind是一款流行的开源PHP论坛软件,以其高效、稳定和易用性著称,广泛应用于各类社区网站的...
【标题】:“dodo_apktool反编译工具”是一个专为Android应用设计的反编译工具,它具有用户友好的图形用户界面(GUI),使得Android应用的逆向工程过程更为简便。 【描述】:这款工具的主要功能是帮助开发者或者...
DODO研究所-NFT 全景解析|历史、当下和未来
APKTool是其中的一个关键工具,它允许用户反编译、编辑和重新打包Android应用的资源和XML文件。 描述中没有提供具体信息,但我们可以基于标签"Dodo"来推测这可能是个人或团队的工作命名,或者是一个特定项目或工具...
在IT世界中,"Dodo"这个名字可能让人联想到灭绝已久的渡渡鸟,而非一个具体的编程技术。然而,当我们结合"Java"这一标签来理解,我们可以从这个独特的组合中挖掘出一些有趣的IT知识。 首先,让我们回顾一下渡渡鸟。...
总之,“dodo_commands”库为Python开发者提供了一种高效的方式来构建命令行工具,它的强大功能和易用性使其成为开发CLI应用的理想选择。通过PyPI的下载服务,我们可以方便地获取和安装这个库,进一步提升我们的开发...
此文件可能包含了处理文件读取、选择要打包的文件、调用ZipArchive类进行压缩等一系列逻辑。通过分析和修改`zip.php`,开发者可以根据自己的需求定制打包规则,比如排除某些文件或目录,或者在打包前执行特定的...
这个平台旨在为喜爱萌宠和动物故事的用户提供一个集中的在线空间,它摒弃了传统新闻网站的模式,完全致力于发布可爱和有趣的动物相关内容。The DoDo的诞生反映了网络上人们对动物内容的巨大兴趣,尤其是年轻用户群体...
"dodo-0.1.tar.gz"是一个Python库的压缩包,它包含了名为"dodo-0.1"的子目录或文件。 在Python中,库通常以`.tar.gz`格式发布,这是一种常见的归档和压缩方法。`.tar`文件是一个将多个文件打包在一起的档案文件,而...
标题中的"PyPI 官网下载 | dodo_commands-0.14.3.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的开源软件包,名为`dodo_commands`,版本为0.14.3,其打包格式是tar.gz。PyPI是Python开发者发布和分享...
Python库的标签也提到了"cloud native",这表明dodo_commands可能遵循云原生的最佳实践,例如,它可能具有轻量级、可移植性好、高度自动化测试等特点,使得它能够轻松地在各种云平台之间迁移和扩展。 总结来说,...
- **反编译Dex**:它能将Dex文件转换为Java字节码,使得开发者可以阅读和理解应用的逻辑。 - **解析资源**:Dodo APKTools可以解析APK中的资源文件,如图片、字符串、布局等,方便进行修改或提取。 - **重新签名*...
它不仅具备基础的录音功能,还配备了一系列高级特性,满足了用户在不同场景下的需求。 首先,这款录音大师的核心功能在于其录音能力。它能轻松捕捉到会议内容,确保录音效果清晰无杂音,是商务人士的理想助手。同时...
任务/待办事项保存我在代码中如何称呼它们的简单待办事项和“任务”是DoDo的一项功能。 一些简单的文本,带有用于将项目标记为已完成的复选框,一个编辑按钮和一个删除按钮。 所有这些都将显示在列表中。 每个任务的...
因为安卓系统是开源的所以给我们自己个性化手机带来了很大的便利。不需要进行复杂的破解等操作甚至只需要几个简单的小软件我们就可以制作一个属于自己的ROM。下面这个就是apk文件的反编译工具和签名工具
DODO:流动性比未拆单高10倍 什么是DODO? :writing_hand: DODO基于全新的做市商算法,其基本思想是风险中立,以保持流动性提供者的投资组合稳定。 与AMM相比,DODO的流动性要好10倍。 谁审核DODO? 是一家领先...
【DoDo.API】是一个专为任务和时间管理设计的后端服务,它的核心目标是提供一个高效、可靠的平台,帮助用户管理和跟踪他们的待办事项。这个项目基于C#编程语言,利用了.NET框架的强大功能,为前端应用提供API接口,...
一块锁屏主题,很漂亮的相信大家一定会喜欢的
类和对象的概念是OOP的基础,通过继承、多态和封装等原则,Dodo提供了强大的抽象能力,使开发者能够构建复杂的软件系统。 并发性是Dodo的另一大亮点,尤其是在多核处理器和分布式系统日益普及的今天。Dodo可能采用...
【标题】"dodo article chat-crx插件"是一款针对文章编辑环境的浏览器扩展程序,主要功能是提供一个内部沟通平台,便于记者和编辑之间的交流。这款插件以中文(繁体)为操作语言,旨在优化工作流程,增强团队协作。 ...