1.求解两个输入正整数的最大公约数。
public class GreatestCommonDivisor
{
  public int getnum(int a,int b)
{
 .....
}
}1。从命令行读入一个以逗号隔开数字序列,对其排序并按照降序排列输出
public class  NumberInputSort{
  public String sortNumberInput(String input)
{
  ......
}
}
2.从命令行读入一个字符串和一个文件名,输出文件中字符串存在与否,如果存在那么输出出现的次数
public class FindString
{
   public boolean isStringExist(String filePath,String stringToFind)
{
  ...
}
  public int existCount(String filePath,String stringToFind)
{
  ......
}
  3.给定一个字符串,求这个字符串中的从左边开始的第一个最长的子串,这个子串必须在该字符串的逆串中也被包含。
如:"XBCDEFYWFEDCBZ" 中包含"BCDEF"子串,而其逆串”ZBCDEFWYFEDCBX"中同样包含这个子串。
Returns :"BCDEF"
public class ReverseSubstring
{
  public string findReversed(String input)
{
  .....
}
}谢谢!!!

解决方案 »

  1.   

    //求解两个输入正整数的最大公约数
    public class GreatestCommonDivisor{
    public int getnum(int a,int b){
    if(b==0){
    return a;
    }else{
    return getnum(a,a%b);
    }
    }


    //测试部分,输入15,45结果是15
    public static void main(String[] args){
    int aInt;
    aInt=new GreatestCommonDivisor().getnum(15,45);
    System.out.println("aInt="+aInt);
    }
    }
      

  2.   

    这是我做的第一题,编译出错,缺少返回语句,大家看是哪里有错:
    import java.io.*;
    class GreatestCommonDivisor
    {
    public int getcd(int a,int b)
    {
      int i,j;
      j=(a>b)?b:a;
      for(i=j;i>0;i--)
      if(a%i==0&&b%i==0)
      return i;// 缺少返回语句。
    }
    public static void main(String args[])
    {
      try
      {    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String str=new String();
        String str1=new String();
        System.out.println("Enter two numbers:");
        str=br.readLine();
        str1=br.readLine();
        int m=Integer.parseInt(str);
        int n=Integer.parseInt(str1);
        GreatestCommonDivisor cd=new GreatestCommonDivisor();
        int e=cd.getcd(m,n);
        System.out.println("The Greatest Common Divisor is: "+e);
        }
        catch(IOException e)
        {
         e.printStackTrace();
        }
    }
    }
      

  3.   

    import java.util.Arrays;
    import java.util.ArrayList;
    public class NumberInputSort{
    public String sortNumberInput(String input){

    System.out.println("get: "+input);
    String[] numList=input.split(","); //将接收参数转成String[];
    StringBuffer bf=new StringBuffer();


    int[] intNumList=new int[numList.length]; //同样大小的int[];

    for(int i=0;i<intNumList.length;i++){

    intNumList[i]=Integer.parseInt(numList[i]);
    }

    Arrays.sort(intNumList); //让Sun的那些老家伙去排序吧.

    String[] outList=new String[intNumList.length];

    int j=0;

    for(int i=intNumList.length-1;i>=0;i--){
    outList[j]=intNumList[i]+",";
    bf.append(outList[j]);
    j++;
    }

    return bf.toString();

    }

    public static void main(String[] args){
    String argString="";
    if(args.length==0){
    System.out.print("java sortNumberInput xx,xx,xx,   xx must be a number!");
    System.exit(0);
    }

    StringBuffer tmp=new StringBuffer();
    for(int i=0;i<args.length;i++){
    tmp.append(args[i]);
    }
    argString=tmp.toString(); String a=new NumberInputSort().sortNumberInput(argString);
    System.out.println("return: "+a);

    }
    }
      

  4.   

    回复人:RUBY_uu() ( 一级(初级)) 信誉:100  2006-04-27 06:01:00  得分:0
    这是我做的第一题,编译出错,缺少返回语句,大家看是哪里有错:
    int i,j;
    j=(a>b)?b:a;
    for(i=j;i>0;i--)
    if(a%i==0&&b%i==0)
    return i;// 缺少返回语句。
    --------------------------------你的return i是属于if(){}块中的, 整个public int getcd(int a,int b){}块缺少一个return int
      

  5.   

    //求解两个输入正整数的最大公约数
    public class GreatestCommonDivisor{
    public int getnum(int a,int b){
    if(b==0){
    return a;
    }else{
    return getnum(a,a%b);
    }
    }这个好像有问题, a=3,b=2 就会死循环。 感觉getnum(b,a%b)可以。
      

  6.   

    //求解两个输入正整数的最大公约数
    public class GreatestCommonDivisor{
    public int getnum(int a,int b){
    if(b==0){
    return a;
    }else{
    return getnum(a,a%b);
    }
    }输入45,15,结果。
      

  7.   

    //求解两个输入正整数的最大公约数
    public class GreatestCommonDivisor{
    public int getnum(int a,int b){
    if(b==0){
    return a;
    }else{
    return getnum(a,a%b);
    }
    }
    ----------------------------
    修改下
    public int getnum(int a, int b) {
        int min=a;
        int max=b;
        if(a>b){
          min=b;
          max=a;
        }
        if (min== 0) {
          return max;
        }
        else {
          return getnum(min, max%min);
        }
      }
      

  8.   


    这是我做的第一题,编译出错,缺少返回语句,大家看是哪里有错:
    import java.io.*;
    class GreatestCommonDivisor
    {
    public int getcd(int a,int b)
    {
      int i,j;
      j=(a>b)?b:a;
      for(i=j;i>0;i--)
      if(a%i==0&&b%i==0)
      return i;// 缺少返回语句。
    }
    改成下面这样就行了
    int getcd(int a,int b)
    {
      int i;
      i=(a>b)?b:a;
      for(;i>0;i--)
      if(a%i==0&&b%i==0)
          break;
      return i;
    }
      

  9.   

    题目很病态,,我受不了..例如第二题,,public String sortNumberInput(String input)  返回是string ,传入参数还是string ,多么无聊..本来要是string[]该多舒服..
      

  10.   

    //1.求解两个输入正整数的最大公约数。
    public class GreatestCommonDivisor
    {
      public int getnum(int a,int b)

      int max = a>b?b:a;
      int result = 1;
      for(int i=1;i<max;i++)
      {
      if((a%i==0)&&(b%i==0))
      {
      result = i;
      }
      }
      return result;
    }
     
    }

    //1。从命令行读入一个以逗号隔开数字序列,对其排序并按照降序排列输出
    public class  NumberInputSort{
      public String sortNumberInput(String input)
    {
      String [] tmp = input.split(",");
      float [] tmp2 = new float[tmp.length];
      String result = "";
      for(int i=0;i<tmp.length;i++)
      {
      tmp2[i] = Float.parseFloat(tmp[i]);
      }
      java.util.Arrays.sort(tmp2);
      for(int j=0;j<tmp2.length;j++)
      {
      result = result + tmp2[j]+",";
      }
      return result.substring(0,result.length());
    }
    }
    //2.从命令行读入一个字符串和一个文件名,输出文件中字符串存在与否,如果存在那么输出出现的次数
    public class FindString
    {
    public boolean isStringExist(String filePath,String stringToFind) throws IOException
    {
    File a = new File(filePath);
    FileReader rd = new FileReader(a);
    BufferedReader brd = new BufferedReader(rd);
    String line = "";
    while((line = brd.readLine())!= null)
    {
    if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
    {
    return true;
    }
    }
    return false;
    }
    public int existCount(String filePath,String stringToFind) throws IOException
    {
    File a = new File(filePath);
    FileReader rd = new FileReader(a);
    BufferedReader brd = new BufferedReader(rd);
    String line = "";
    int count = 0;
    while((line = brd.readLine())!= null)
    {
    if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
    {
    count++;
    }
    }
    return count;
    }
    }
      // 3.给定一个字符串,求这个字符串中的从左边开始的第一个最长的子串,这个子串必须在该字符串的逆串中也被包含。
    // 如:"XBCDEFYWFEDCBZ" 中包含"BCDEF"子串,而其逆串”ZBCDEFWYFEDCBX"中同样包含这个子串。
    // Returns :"BCDEF"
    public class ReverseSubstring
    {
    public String findReversed(String input)
    {
    char [] seq = input.toCharArray();
    char [] inversseq = new char[seq.length];
    String inverseInput = "";
    int lenth = 0;
    String result= "";
    for(int i=0;i<inversseq.length;i++)
    {
    inversseq[i]= seq[inversseq.length-1-i];
    }
    inverseInput = String.valueOf(inversseq);
    for(int i=0;i<input.length();i++)
    {
    for(int j=i+1;j<input.length();j++)
    {
    CharSequence tmp = input.substring(i,j);
    if( (input.contains(tmp))&&(inverseInput.contains(tmp)))
    {
    if(tmp.length()>lenth)
    {
    lenth = tmp.length();
    result = tmp.toString();
    }

    }
    }
    }
    return result;
    }
    }好久没做过这种操作基本数据的题了,以前c数据结构的时候经常写,呵呵
      

  11.   

    题目还没仔细看,不过这个运行的结果是不对的呀:
    //2.从命令行读入一个字符串和一个文件名,输出文件中字符串存在与否,如果存在那么输出出现的次数
    import java.io.*;
    public class FindString
    {
    public boolean isStringExist(String filePath,String stringToFind) throws IOException
    {
    File a = new File(filePath);
    FileReader rd = new FileReader(a);
    BufferedReader brd = new BufferedReader(rd);
    String line = "";
    while((line = brd.readLine())!= null)
    {
    if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
    {
    return true;
    }
    }
    return false;
    }
    public int existCount(String filePath,String stringToFind) throws IOException
    {
    File a = new File(filePath);
    FileReader rd = new FileReader(a);
    BufferedReader brd = new BufferedReader(rd);
    String line = "";
    int count = 0;
    while((line = brd.readLine())!= null)
    {
    if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
    {
    count++;
    }
    }
    return count;
    }

    public static void main(String args[])
    {
    try
    {FindString fs=new FindString();
     int n=fs.existCount(args[0],args[1]);
    boolean b=fs.isStringExist(args[0],args[1]);
    System.out.println(b);
    System.out.println(n);
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    }
    }
    E:\JAVA>java FindString c:\\abc.txt abc
    false
    0
    我建的abc.txt文件内容是:abcdefghijklmnabcdefghijklmnabcdefghijklmn,我输入 abc不应该是false和0呀。
      

  12.   

    第一题:
    int Divor(int a,int b)//a>=b;
    {
       if(b==1) return a;
       return (b,a%b);
    }//这是时间复杂度最小的算法;
      

  13.   

    int a=Integer.parseInt(args.length);
    int b=Integer.parseInt(args.length);
    我的这两行怎么会报错了啊 大家看下呀
      

  14.   

    to qingyuan18(zealot_tang) 
    if((line.indexOf(stringToFind)>=0)&&(line.indexOf(stringToFind)<=line.length()))
    {
    count++;
    }
    这句话存在漏计
    即使一行有多个stringToFind的话
    你这样算也累加了一个
      

  15.   

    第1个题目        public static int getnum(int a,int b){
    if(b==0){
    return a;
    }else{
    return getnum(b,a%b);
    }
    }
    楼上写的很清楚了,所以我就照搬过来了.呵呵
    第二题,很简单,我是用正则写的,没必要写得和楼上那样
    public static boolean isStringExist(String filePath,String stringToFind){
    return existCount( filePath, stringToFind)>0;
    }

     public static int existCount(String filePath,String stringToFind){
            int i = 0 ;
    String needToMatch = "\\Q"+filePath+"\\E";
    Pattern p = Pattern.compile(needToMatch);
    Matcher matcher = p.matcher(stringToFind);

    while(matcher.find()){
    i++;
    }

    return i;
    }
    第三题 这个可能复杂点,本来也想用正则的,但是实在不知道怎么写,所以用了split拼,唯一麻烦的是,我的数据最终结果采用Map存储<key,value>对应了<length,value> ,所以会出现长度相同的字符会最终替换为最后一个,当然,我是觉得这个题目本身就有漏洞,如果连续的字符串同时出现最大,比如出现两个5长度的字符的话,也没给处理思路,其实也可以把Map改成<key,value>对应了<value,length> ,那样获得的结果更好,但我觉得没那必要,所以就没处理了.
        public static String findReversed(String input) {
       if(input==null)
     return null ;  
     Object[] a = input.split("");
     
     Object[] a1 = new Object[a.length-1];
     int j = 0;
     for(int i = 1;i<a.length;i++){
     a1[j++] = a[i];
     }
     
     
     List b = Arrays.asList(a1.clone());  
     Collections.reverse(b);
       
     Object[] c  = new Object[a1.length];
     for(int i =0 ;i<a1.length;i++){
     if(a1[i].equals(b.get(i))){
     c[i] = a1[i]; 
     }
     }
     
     String result = "";
     Map<Integer,String> resultMap = new HashMap();
     for(int i = 0;i<a1.length;i++){
     if(c[i]!=null){
     result+=c[i];
     }else{
     if(result.length()>0){
     resultMap.put(result.length(),result);
     result = "";
     }
     }
     }
     
     return resultMap.get(Collections.max(resultMap.keySet()));
     }
    最后,发个广告~~呵呵。。小弟最近想换工作了,,有没公司愿意要,工资要求不高
    5.5  北京就行。。
      

  16.   

    qingyuan18(zealot_tang)的第一题的时间复杂度比较大,
    而后来BusyCai()的方法也存在问题。
    我来写一个
    //求最大公约数
    public class GreatestCommonDivisor{

        /**
         * 输入两个整数,求最大公约数
         * @param a
         * @param b
         * @return 最大公约数
         */
         public static int getNum(int a,int b){

          int max, min;

          //取a,b中最大的数
          if(a >= b){
    max = a;
    min = b;
          }else{
    max = b;
    min = a;
          }
          
          //如果最大数和最小数取模,值为0,则最大公约数为为最小数
          if(max % min == 0)
    return min;

          //如果最小数为1,则最大公约数为1,否则递归
          if(min == 1)
           return min;
          else
           return getNum(max, max % min);
       }
    }
      

  17.   

    to qingyuan18(zealot_tang) 
    一行只计算了一次
      

  18.   

    为什么把 max % min == 0 单独列出来,是因为求最大公约数的,参数不能为0,避免在递归调用时出现参数为0的问题。
      

  19.   

    public static int existCount(String filePath,String beFindedString) {
    int count=0;
    try {

    File f = new File(filePath);
    FileReader fr = new FileReader(f);
    BufferedReader br = new BufferedReader(fr);
    String str = "";
    while((str = br.readLine())!=null) {
    int length=str.length();
    while(length>=beFindedString.length()) {
    int i = 0;

    if(str.substring(i,beFindedString.length()).equals(beFindedString)) {
    count++;
    }
    i += 1;
    length-=1;
    }
    }


    } catch(IOException e) {
    e.printStackTrace();
    }
    return count;
    }
    怎么我这样子算出的不对啊
    大家过来看看这个方法有什么错误
      

  20.   

    很明显的错误啊
    应该
    int length = str.length();
    //要查找的字符串的长度
    int length2 = beFindedString.length();
    int i = 0;
    while(length >= length2){
      if(str.substring(i, length2).equals(beFindedString)) {
         count++;
         str = str.substring(i + length2, length);
         length = str.length();
         i = 0;
         continue;
      }
      i ++;
    }
      

  21.   

    前两道很简单:
    第三道可以使用回溯法解决:/**
     * 
     */
    package test.bit.jdc.algorithm;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;/**
     *3.给定一个字符串,求这个字符串中的从左边开始的第一个最长的子串,这个子串必须在该字符串的逆串中也被包含。
     *如:"XBCDEFYWFEDCBZ" 中包含"BCDEF"子串,而其逆串”ZBCDEFWYFEDCBX"中同样包含这个子串。
     *Returns :"BCDEF"
     *
     */
    public class ReverseWord { public static void main( String[] args ) throws IOException{

    //input data
    String line;
    //char array for data and inverse data.
    char[] cs ;
    char[] ics;

    //string length.
    int length;
    //max subString length;
    int max = 0;
    //max Sub String.
    String maxSub = null;
    //temporary varable.
    int i,j,start;

    //do real work in follow.
    //step one: read string form terminal.
    InputStreamReader isr = new InputStreamReader( System.in );
    BufferedReader bir = new BufferedReader( isr );

    line = bir.readLine();
    length = line.length();
    cs = line.toCharArray();
    ics = new char[cs.length]; //step two: inverse the character array.
    for( i = 0; i<length; i++){
    ics[i] = cs[length-1-i];
    }

    //steop three: find the max subString.
    String iline = new String( ics );
    for( i = 0 ; i<length; i++){
    start = -1;
    start = iline.indexOf( cs[i], start+1 );
    for( ; start != -1;start = iline.indexOf( cs[i], start+1 ) ){
    for( j=0;i+j < length && start + j < length && cs[i+j] == ics[start+j];j++ );
    if( j > max ) {
    max = j;
    maxSub = line.substring( i, i + j );
    }
    }
    }
    System.out.println( "the Max = " + max + " and MaxSubString = " + maxSub );
    }
    }
      

  22.   

    qingyuan18(zealot_tang) ( ) 的第二题可以实现,但是不干练
    overgame(我菜我存在) 的第二题,想到用正则表达式,不错,但是他的方法写错了,两个对象的顺序都搞错了,而且只是把filePath当作字符串进行匹配的,而不是把filePath下的文件拿来做,等有时间我来写一个
      

  23.   

    to GlandJacky(Jacky狂奔在Java大地)...我觉得
    public static int getnum(int a,int b){
    if(b==0){
    return a;
    }else{
    return getnum(b,a%b);
    }
    }已经完全可以完成楼主的要求,做max和min的判断完全多余~我们来做个判断,如果a>b ,那实际和你做的一样
    如果a<b 因为a%b取余 后边的return 实际上已经把a,b互换了,所以实际比较大小是完全多余的
    至于第二题.sorry。没仔细看题目,不过把对比的源头换成该文件下的所有字符就是,我觉得不是很难.
      

  24.   

    第三题
    package test;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2006</p>
     * <p>Company: </p>
     * @author :jeafyezheng 血浪骑兵
     * @version 1.0
     */public class FindsubString {
      public String sub(String s )
      {
        char str[] = s.toCharArray();
        int len = str.length;
        for(int sublen = len; sublen > 0; sublen--)
        {
          for(int start = 0; (len - start) >= sublen ; start++)
          {
              if(judge(str, start, sublen))
              {
                System.out.println("start = " + start + " len = " + sublen);
                return new String(str, start, sublen );
              }
          }
        }
        return "";
      }  private boolean judge(char[] str, int start, int sublen) {
        for(int end = str.length ; end > sublen; end --)
        {
            int j = 1;
            for (int i = start; i < start + sublen; i++, j++)
            {
              if(str[i] != str[end - j])
              {
                break;
              }
            }
            j--;
            if(j == sublen )
            {
              return true;
            }
        }
        return false;
      }  public static void main(String[] args) {
        FindsubString fs = new FindsubString();
        System.out.println("sub= " + fs.sub("ksABCddcCBA"));
      }
    }
      

  25.   

    第三题呀!!      通过测试  没有效率的垃圾程序public class ReverseSubstring {    public String findReversed(String inStr) {     String res = "NOT FOUND";
         int len = 0;
         ArrayList lList = new ArrayList();
         Map lMap = new HashMap();
         String lStr = null;
         for (int i = 0; i < inStr.length()-1; i++) {
         for (int j = i + 2; j < inStr.length(); j++) {
         lStr = inStr.substring(i, j);
         lList.add(lStr);
         }
         }
    char[] ch = new char[inStr.length()];
    for (int i = 0; i < inStr.length(); i++) {
    ch [i] = inStr.charAt(i);
         }
    String lStr2 = "";
    lStr = null;
    for (int i = inStr.length()-1; i > 0; i--) {
    lStr2 = lStr2 + ch [i];
         }
         for (int i = 0; i < lStr2.length()-1; i++) {
         for (int j = i + 2; j < lStr2.length(); j++) {
         lStr = lStr2.substring(i, j);
         lMap.put(lStr, lStr);
         }
         }
         for (int i = 0; i < lList.size(); i++) {
         if (lList.get(i).equals(lMap.get(lList.get(i)))) {
         lStr = (String) lList.get(i);
         if (len < lStr.length()) {
         len = lStr.length();
         res = lStr;
         }
         }
         }
         return res;
        }