输入1-9中的任意7个数字,如(1234567),其中1可表示为a或b或c,2可表示为d或e或f,3可表示为g或h或i,4可表示为j或K,5可表示为l或m或n,6可表示为o或p或q,7可表示为r或s或t,8可表示为u或v,9可表示为w或x或y或z
如何输出那个7位的数所表示的所有字母组合。如adgjloruw是一种可能。
求高手帮忙,谢谢!

解决方案 »

  1.   

    你说输入的是7位,adgjloruw这个结果是不可能的吧!你写错了吧!
    还有数字可以重复吗?比如1234566
      

  2.   

    //写得很繁琐,郁闷,结果也很多啊。谁给个简单的import java.util.Scanner;
    import java.io.*;
    public class Test { 
        
         public static void main(String args[]) throws Exception{ 
          File f = new File("result.txt");
          FileWriter fw = new FileWriter(f);
          BufferedWriter bw = new BufferedWriter(fw);
    Scanner reader = new Scanner(System.in);
         String s = reader.next();
    String[][] str = new String[7][];
          int[] num = new int[7];
         
          for(int i=0;i<7;i++){
          num[i] = Integer.parseInt(""+s.charAt(i));
          if(num[i]>=1 && num[i]<=9){
          str[i]= getChar(num[i]);
          }else{
          System.out.println("Error input");
          System.exit(0);
          }
          }
         
         long count = 0;
    String output = "";
          for(int n1=0;n1<str[0].length;n1++)
          for(int n2=0;n2<str[1].length;n2++)
          for(int n3=0;n3<str[2].length;n3++)
          for(int n4=0;n4<str[3].length;n4++)
          for(int n5=0;n5<str[4].length;n5++)
          for(int n6=0;n6<str[5].length;n6++)
          for(int n7=0;n7<str[6].length;n7++){
          count++;
          output += str[0][n1]+str[1][n2]+str[2][n3]
          +str[3][n4]+str[4][n5]+str[5][n6]+str[6][n7]+" ";
         
         
      }
      bw.write(output);
      bw.close();
      System.out.println(s+": "+count); 
         }  

    public static String[] getChar(int i){
    String[] str = null;
    switch(i){
    case 1:
    String[] num1 = {"a","b","c"};
    str = num1;
    break;
    case 2:
    String[] num2 = {"d","e","f"};
    str = num2;
    break;
    case 3:
    String[] num3 = {"g","h","i"};
    str = num3;
    break;
    case 4:
    String[] num4 = {"j","k"};
    str = num4;
    break;
    case 5:
    String[] num5 = {"l","m","n"};
    str = num5;
    break;
    case 6:
    String[] num6 = {"o","p","q"};
    str = num6;
    break;
    case 7:
    String[] num7 = {"r","s","t"};
    str = num7;
    break;
    case 8:
    String[] num8 = {"u","v"};
    str = num8;
    break;
    case 9:
    String[] num9 = {"w","x","y","z"};
    str = num9;
    break;
    } return str;
    }

      

  3.   

    我写了一个
    /****************************
     * 实现自定义的整数加法
     */import java.util.Arrays;public class MyInteger {
    private int[] num;
    private int[] limit;

    public MyInteger(int[] num, int[] limit) {
    super();
    this.num = num;
    this.limit = limit;
    } public int[] getNum() {
    return num;
    } public void setNum(int[] num) {
    this.num = num;
    } public int[] getLimit() {
    return limit;
    } public void setLimit(int[] limit) {
    this.limit = limit;
    }


    public int[] addOne(){
    int n = num.length-1;
    int a = 1;
    while(a != 0 && n>=0){
    num[n]+=a;
    if(num[n]>=limit[n]){
    num[n] = 0;
    a = 1;
    }
    else{
    a = 0;
    }
    n--;
    }
    return getNum();
    }
    }/**************************
     * 主要类
     */import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;public class Paixu { public static void getNum(int[] num) {
    List<Integer> nums = new ArrayList<Integer>(9);
    for (int i = 1; i < 10; i++) {
    nums.add(i);
    }
    Collections.shuffle(nums);
    for (int i = 0; i < num.length; i++) {
    num[i] = nums.get(i);
    }
    } public static void main(String args[]) {
    int N = 2;
    int[] num = new int[N];
    int[] aNum = new int[N];
    int[] limit = new int[N];
    char[][] a = { { 'a', 'b', 'c' }, { 'd', 'e', 'f' }, { 'g', 'h', 'i' },
    { 'j', 'k' }, { 'l', 'm', 'n' }, { 'o', 'p', 'q' },
    { 'r', 's', 't' }, { 'u', 'v' }, { 'w', 'x', 'y', 'z' } }; getNum(num); // 从1~9中随机取N个数字 for (int i = 0; i < aNum.length; i++) {
    aNum[i] = 0;
    limit[i] = a[num[i] - 1].length;
    } System.out.print("找到的" + N + "个数字分别是:");
    for (int i = 0; i < num.length; i++) {
    System.out.print(num[i] + " ");
    }
    System.out.println(); MyInteger mi = new MyInteger(aNum, limit); int k = 1;
    for (int i : limit) {
    k *= i;
    }
    while (k > 0) {
    int[] result = mi.addOne(); for (int i = 0; i < result.length; i++) {
    System.out.print(a[num[i] - 1][result[i]]);
    }
    System.out.println();
    k--;
    } }
    }
    由于7个实在结果太多,我这里就取2个数字,所以N = 2; 如果要修改,可以改掉运行结果:
    找到的2个数字分别是:9 7 
    ws
    wt
    xr
    xs
    xt
    yr
    ys
    yt
    zr
    zs
    zt
    wr一共12种排序,一个不少。如果N=7, 我随机取得是9 6 7 3 8 1 2 这七个数字,运行时间是226毫秒。
      

  4.   

    import java.io.*;
    public class RandomNumString 
    {
    //输入1-9中的任意7个数字,如(1234567),其中1可表示为a或b或c,2可表示为d或e或f,3可表示为g或h或i,4可表示为j或K,
    //5可表示为l或m或n,6可表示为o或p或q,7可表示为r或s或t,8可表示为u或v,9可表示为w或x或y或z 
    //如何输出那个7位的数所表示的所有字母组合。如adgjloruw是一种可能。
    public static void main(String[] args)
    {
    try
    {
    System.out.println("请输入一个七位数,其中不包括0");
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);
    String s=br.readLine();
    for(int j=0;j<numString(s.charAt(0)).length();j++)
    for(int k=0;k<numString(s.charAt(1)).length();k++)
    for(int l=0;l<numString(s.charAt(2)).length();l++)
    for(int m=0;m<numString(s.charAt(3)).length();m++)
    for(int n=0;n<numString(s.charAt(4)).length();n++)
    for(int o=0;o<numString(s.charAt(5)).length();o++)
    for(int p=0;p<numString(s.charAt(6)).length();p++)
    {
    String str1=""+numString(s.charAt(0)).charAt(j)+numString(s.charAt(1)).charAt(k)+numString(s.charAt(2)).charAt(l)+numString(s.charAt(3)).charAt(m)+numString(s.charAt(4)).charAt(n)+numString(s.charAt(5)).charAt(o)+numString(s.charAt(6)).charAt(p);
    System.out.print(str1);
    System.out.println();
    }
    }
    catch(IOException e){}
    }
    static String numString(char x)
    {
    String str="a";
    if(x=='1')str="abc";
    if(x=='2')str="def";
    if(x=='3')str="ghi";
    if(x=='4')str="jk";
    if(x=='5')str="lmn";
    if(x=='6')str="opq";
    if(x=='7')str="rst";
    if(x=='8')str="uv";
    if(x=='9')str="wxyz";
    return str;
    }
    }
      

  5.   

    感谢楼主,我初学者,顺便学习了StringBuffer;
    import java.io.*;
    public class RandomNumString 
    {
    //输入1-9中的任意7个数字,如(1234567),其中1可表示为a或b或c,2可表示为d或e或f,3可表示为g或h或i,4可表示为j或K,
    //5可表示为l或m或n,6可表示为o或p或q,7可表示为r或s或t,8可表示为u或v,9可表示为w或x或y或z 
    //如何输出那个7位的数所表示的所有字母组合。如adgjloruw是一种可能。
    public static void main(String[] args)
    {
    try
    {
    System.out.println("请输入一个七位数,其中不包括0");
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);
    String s=br.readLine();
    for(int j=0;j<numString(s.charAt(0)).length();j++)
    for(int k=0;k<numString(s.charAt(1)).length();k++)
    for(int l=0;l<numString(s.charAt(2)).length();l++)
    for(int m=0;m<numString(s.charAt(3)).length();m++)
    for(int n=0;n<numString(s.charAt(4)).length();n++)
    for(int o=0;o<numString(s.charAt(5)).length();o++)
    for(int p=0;p<numString(s.charAt(6)).length();p++)
    {
    //String str1=""+numString(s.charAt(0)).charAt(j)+numString(s.charAt(1)).charAt(k)+numString(s.charAt(2)).charAt(l)+numString(s.charAt(3)).charAt(m)+numString(s.charAt(4)).charAt(n)+numString(s.charAt(5)).charAt(o)+numString(s.charAt(6)).charAt(p);
    //System.out.print(str1);
    //System.out.println();
    char s1=numString(s.charAt(0)).charAt(j);
    char s2=numString(s.charAt(1)).charAt(k);
    char s3=numString(s.charAt(2)).charAt(l);
    char s4=numString(s.charAt(3)).charAt(m);
    char s5=numString(s.charAt(4)).charAt(n);
    char s6=numString(s.charAt(5)).charAt(o);
    char s7=numString(s.charAt(6)).charAt(p);
    StringBuffer sb=new StringBuffer().append(s1).append(s2).append(s3).append(s4).append(s5).append(s6).append(s7);
    System.out.print(sb);
    System.out.println();
    }
    }
    catch(IOException e){}
    }
    static String numString(char x)
    {
    String str="a";
    if(x=='1')str="abc";
    if(x=='2')str="def";
    if(x=='3')str="ghi";
    if(x=='4')str="jk";
    if(x=='5')str="lmn";
    if(x=='6')str="opq";
    if(x=='7')str="rst";
    if(x=='8')str="uv";
    if(x=='9')str="wxyz";
    return str;
    }
    }
      

  6.   


    import java.io.*;
    public class RandomNumString 
    {
        //输入1-9中的任意7个数字,如(1234567),其中1可表示为a或b或c,2可表示为d或e或f,3可表示为g或h或i,4可表示为j或K,
        //5可表示为l或m或n,6可表示为o或p或q,7可表示为r或s或t,8可表示为u或v,9可表示为w或x或y或z 
        //如何输出那个7位的数所表示的所有字母组合。如adgjloruw是一种可能。
        public static void main(String[] args)
        {
            try
            {
                System.out.println("请输入一个七位数,其中不包括0");
                InputStreamReader isr=new InputStreamReader(System.in);
                BufferedReader br=new BufferedReader(isr);
                String s=br.readLine();
                    for(int j=0;j<numString(s.charAt(0)).length();j++)
                        for(int k=0;k<numString(s.charAt(1)).length();k++)
                            for(int l=0;l<numString(s.charAt(2)).length();l++)
                                for(int m=0;m<numString(s.charAt(3)).length();m++)
                                    for(int n=0;n<numString(s.charAt(4)).length();n++)
                                        for(int o=0;o<numString(s.charAt(5)).length();o++)
                                            for(int p=0;p<numString(s.charAt(6)).length();p++)
                                                {
                                             String sb1 = numString(s.charAt(0)).charAt(j)+"";
                                             String sb2 = numString(s.charAt(1)).charAt(k)+"";
                                             String sb3 = numString(s.charAt(2)).charAt(l)+"";
                                             String sb4 = numString(s.charAt(3)).charAt(m)+"";
                                             String sb5 = ""+numString(s.charAt(4)).charAt(n)+"";
                                             String sb6 = numString(s.charAt(5)).charAt(o)+"";
                                             String sb7 = numString(s.charAt(6)).charAt(p)+"";
                                                    System.out.print(sb1+sb2+sb3+sb4+sb5+sb6+sb7);
                                                    System.out.println();
                                                }
            }
            catch(IOException e){}
        }
        static String numString(char x)
        {
            String str="a";
            if(x=='1')str="abc";
            if(x=='2')str="def";
            if(x=='3')str="ghi";
            if(x=='4')str="jk";
            if(x=='5')str="lmn";
            if(x=='6')str="opq";
            if(x=='7')str="rst";
            if(x=='8')str="uv";
            if(x=='9')str="wxyz";
            return str;
        }
    }
      

  7.   

    用了7个for的程序肯定不可取。至少应该象4楼那样用数组表示。
      

  8.   

    回答5楼:
    楼上的当N改为10或以上的时候,怎么程序没法运行啊?因为我就设定了数组a[9][]阿,也就是说从1~9个数字中取若干个数字你N=10,。,当然出错了,我没有写输入验证。这个方法我觉得是比较简单的实现了,比7重循环好一些
      

  9.   

    哦,我有点明白5楼的意思,忘了说明一点,我是默认取得数字是不能重复的,所以1~9数字不能取超过9个数字,如果可以重复的话,需要修改
    getNum(int[] num)这个方法,不好意思,题目要求我理解成不能重复的了,楼主请说的更清楚一些。7重循环是最简单的实现方法,并不是说效率低,因为我的方法效率说不定还比不上用循环,主要是如果用循环来做的话,如果我要取的数字数目不定,就不好实现了
      

  10.   

    求教一下:你的代码放到eclipse中提示第一个类"错误设置了构造"请问可以解决一下吗?我才学java想把这个简单的方法学会搞明白,谢谢.
      

  11.   

    啊?我也不了解了,我是从eclipse中复制过来的。
      

  12.   

    试下我的吧,
    我的你输入七个数,输入1到9,重复也行。
    如果含有不是1到9就提示错误退出。
    少于7个就数组下标越界了,没去判断了。
    要控制长度也行啊,加个判断string的length就行了。
    结果保存在文本里。
    速度也不慢啊,
    1000多个结果2秒多,跟4楼差不了多少,不过还是向4楼学习。
      

  13.   

    吃完饭我又修改了一下,把 getNum(int[] num)修改成:
    public static void getNum(int[] num) {
            for(int i=0; i<num.length; i++){
             num[i] = new Random().nextInt(9)+1;    //随机取N个1~9之间的任意数字,可以重复
            }
        }
    就行了,其实要可以重复的话,更简单一些。当N=10的时候输出太多,控制台放不下,可以自己修改一下,输出到文件中去。回答17楼,我真的不知道为什么,我刚刚在实验室也是从帖子上把我的代码复制下来的,没有任何问题啊。
      

  14.   

    递归算法。
    public class NumberConvert { static char[][] converter = { { 'a', 'b', 'c' }, { 'd', 'e', 'f' }, { 'g', 'h', 'i' },
                { 'j', 'k' }, { 'l', 'm', 'n' }, { 'o', 'p', 'q' },
                { 'r', 's', 't' }, { 'u', 'v' }, { 'w', 'x', 'y', 'z' } };

    public static  void convert(StringBuffer num,int pos){
    //num未验证合法性
    if(pos==num.length()) {
    System.out.println(num);
    return;
    }
    StringBuffer snum=new StringBuffer(num);
    int x=snum.charAt(pos)-49;//
    for(int j=0;j<converter[x].length;j++){
    snum.setCharAt(pos, converter[x][j]);
    convert(snum,pos+1);
    }
    } public static void main(String[] args) {
    convert(new StringBuffer("123456789"),0);
    }
    }
      

  15.   

    value[]=1234567;
    str="";
    for(int i;i<value.lenth;i++)
        str+="table"+value[i]+","str2="select * form "+ str.substring(0,str.length-1)
    query(str2)
      

  16.   


    好码 保存 hoho 
      

  17.   

    回过的帖竟然在“我回复的帖子找不到”,shit。