`

是否很久没抽象和逻辑了呢? DODO它吧(很基础)一

阅读更多

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);




}

}     //小数点部分及十亿以上的数逻辑其本相似不做赘述
9 楼 x1387420 2010-06-08  
其实是要花点时间做的,不知道高手做这个花多长时间?
8 楼 laoas 2010-06-08  
学习,小弟才学编程
7 楼 andy54321 2010-06-08  
每次看都有不清楚的
什么时候真正senior啊
6 楼 shuiguozheng 2010-06-07  
游客飘过!!!!
5 楼 jihui1988 2010-06-07  
刚上来就看到啦 非常好 非常适合我 感谢楼主
4 楼 maozj 2010-06-07  
4. 不全排列问题(不重复)。
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"));
}
}
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();
	}

}

相关推荐

    PHPWind dodostyle模板

    PHPWind dodostyle模板

    DODO研究所-NFT 全景解析|历史、当下和未来.rar

    DODO研究所-NFT 全景解析|历史、当下和未来

    PHP整站打包程序-By DoDo

    PHP整站打包程序-By DoDo 小巧、快捷、推荐!

    林dodo.zip

    林dodo.zip

    Dodo_apktool.zip

    Dodo_apktool.zip

    DoDo:Android手机的ToDo应用程序

    任务/待办事项保存我在代码中如何称呼它们的简单待办事项和“任务”是DoDo的一项功能。 一些简单的文本,带有用于将项目标记为已完成的复选框,一个编辑按钮和一个删除按钮。 所有这些都将显示在列表中。 每个任务的...

    Dodo_apktool

    因为安卓系统是开源的所以给我们自己个性化手机带来了很大的便利。不需要进行复杂的破解等操作甚至只需要几个简单的小软件我们就可以制作一个属于自己的ROM。下面这个就是apk文件的反编译工具和签名工具

    dodo-smart-contract

    DODO:流动性比未拆单高10倍 什么是DODO? :writing_hand: DODO基于全新的做市商算法,其基本思想是风险中立,以保持流动性提供者的投资组合稳定。 与AMM相比,DODO的流动性要好10倍。 谁审核DODO? 是一家领先...

    dodo锁屏主题

    一块锁屏主题,很漂亮的相信大家一定会喜欢的

    DoDo(兜兜)截屏缩放大师(豪华版) 7.0.0.zip

    DoDo(兜兜)截屏缩放大师(豪华版)[V 7.0.0 免费]。  1、此版免费。  2、支持捐助。  详细介绍:  中国辽宁大连,鑫信软件全力打造的,经典大众软件之一。简单的说,就是截屏大师和缩放大师二合一软件。  ...

    DoDo(兜兜)录音摄像大师(豪华版) 7.0.0.zip

    DoDo(兜兜)录音摄像大师(豪华版)。  1、此号版本免费。  2、支持购买捐助。  详细介绍:  中国辽宁大连,鑫信软件全力打造的,经典大众软件之一。简单的说,就是录音大师和摄像大师二合一软件  目前...

    dodo_apktool反编译工具

    android反编译工具,带UI界面,可签名

    dodo.js:基于Javascript Pixi的游戏开发库

    dodo.js Javascript游戏引擎 Dodo.js是一个新生的轻量级(&lt;500K)javascript游戏引擎。 该框架依赖 Underscore.js,“有用的函数式编程助手” PIXI用于图形处理 ... 但是,它可以很容易地扩展到中等规模的项目。

    purescript-dodo-printer:一台合适的打印机

    注释使您可以使用样式和颜色(例如, Dodo.Ansi用于ANSI图形)标记文档树的一部分。 不使用注释的Doc可以使用类型变量或Void 。 构造和操作Doc的最原始方法是通过text和Monoid 。 import Prelude import Dodo ( ...

    Dodo

    渡渡鸟

    Dodo APK Tools(Android程序反编译器)

    Dodo APK Tools(Android程序反编译器)绿色版 老外写的《android-apktool》软件,可以帮助我们把APK反编译,生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译...

    DoDo.API

    待办事项后端 DoDo的服务器端代码-您的任务和时间管理器!

    Python库 | dodo-0.1.tar.gz

    python库。资源全名:dodo-0.1.tar.gz

    dodo:小技巧和任务

    dodo:小技巧和任务

    动物内容聚合站The DoDo:将萌宠进行到底.docx

    动物内容聚合站The DoDo:将萌宠进行到底.docx

Global site tag (gtag.js) - Google Analytics