如何输出那个7位的数所表示的所有字母组合。如adgjloruw是一种可能。
求高手帮忙,谢谢!
26 个解决方案
#1
你说输入的是7位,adgjloruw这个结果是不可能的吧!你写错了吧!
还有数字可以重复吗?比如1234566
还有数字可以重复吗?比如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
晕死```
这样做出来的项目有几台机器可以承受呀`````
吓人
这样做出来的项目有几台机器可以承受呀`````
吓人
#4
我写了一个
由于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毫秒。
/****************************
* 实现自定义的整数加法
*/
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毫秒。
#5
楼上的当N改为10或以上的时候,怎么程序没法运行啊?
#6
巨强的排列组合,应该有简单一点的办法,琢磨一下。
#7
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;
}
}
#8
感谢楼主,我初学者,顺便学习了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;
}
}
#9
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;
}
}
#10
用了7个for的程序肯定不可取。至少应该象4楼那样用数组表示。
#11
回答5楼:
楼上的当N改为10或以上的时候,怎么程序没法运行啊?
因为我就设定了数组a[9][]阿,也就是说从1~9个数字中取若干个数字
你N=10,。,。。。当然出错了,我没有写输入验证。
这个方法我觉得是比较简单的实现了,比7重循环好一些
楼上的当N改为10或以上的时候,怎么程序没法运行啊?
因为我就设定了数组a[9][]阿,也就是说从1~9个数字中取若干个数字
你N=10,。,。。。当然出错了,我没有写输入验证。
这个方法我觉得是比较简单的实现了,比7重循环好一些
#12
我开始也想用数组,可是由于我是初学,实在是没有想到怎么用数组输出每一种可能,只好用最笨的方法.我再看下4楼的.
#13
哦,我有点明白5楼的意思,忘了说明一点,我是默认取得数字是不能重复的,所以1~9数字不能取超过9个数字,如果可以重复的话,需要修改
getNum(int[] num)这个方法,
不好意思,题目要求我理解成不能重复的了,楼主请说的更清楚一些。
7重循环是最简单的实现方法,并不是说效率低,因为我的方法效率说不定还比不上用循环,主要是如果用循环来做的话,如果我要取的数字数目不定,就不好实现了
getNum(int[] num)这个方法,
不好意思,题目要求我理解成不能重复的了,楼主请说的更清楚一些。
7重循环是最简单的实现方法,并不是说效率低,因为我的方法效率说不定还比不上用循环,主要是如果用循环来做的话,如果我要取的数字数目不定,就不好实现了
#14
求教一下:你的代码放到eclipse中提示第一个类"错误设置了构造"请问可以解决一下吗?我才学java想把这个简单的方法学会搞明白,谢谢.
#15
恩,我想了老久,也没有想到怎么能把需要的数目由输入给定,没想到...
#16
啊?我也不了解了,我是从eclipse中复制过来的。。。。
#17
哇,不会吧,你的里面没问题,我的里面它给我一大片红色波浪线.
#18
试下我的吧,
我的你输入七个数,输入1到9,重复也行。
如果含有不是1到9就提示错误退出。
少于7个就数组下标越界了,没去判断了。
要控制长度也行啊,加个判断string的length就行了。
结果保存在文本里。
速度也不慢啊,
1000多个结果2秒多,跟4楼差不了多少,不过还是向4楼学习。
我的你输入七个数,输入1到9,重复也行。
如果含有不是1到9就提示错误退出。
少于7个就数组下标越界了,没去判断了。
要控制长度也行啊,加个判断string的length就行了。
结果保存在文本里。
速度也不慢啊,
1000多个结果2秒多,跟4楼差不了多少,不过还是向4楼学习。
#19
吃完饭我又修改了一下,把 getNum(int[] num)修改成:
就行了,其实要可以重复的话,更简单一些。
当N=10的时候输出太多,控制台放不下,可以自己修改一下,输出到文件中去。
回答17楼,我真的不知道为什么,我刚刚在实验室也是从帖子上把我的代码复制下来的,没有任何问题啊。
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楼,我真的不知道为什么,我刚刚在实验室也是从帖子上把我的代码复制下来的,没有任何问题啊。
#20
递归全排列各位
然后全排列出来的每一个组合对其可用的数值进行穷举
然后全排列出来的每一个组合对其可用的数值进行穷举
#21
递归算法。
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);
}
}
#22
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)
str="";
for(int i;i<value.lenth;i++)
str+="table"+value[i]+","
str2="select * form "+ str.substring(0,str.length-1)
query(str2)
#23
好码 保存 hoho
#24
#25
#26
回过的帖竟然在“我回复的帖子找不到”,shit。
#1
你说输入的是7位,adgjloruw这个结果是不可能的吧!你写错了吧!
还有数字可以重复吗?比如1234566
还有数字可以重复吗?比如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
晕死```
这样做出来的项目有几台机器可以承受呀`````
吓人
这样做出来的项目有几台机器可以承受呀`````
吓人
#4
我写了一个
由于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毫秒。
/****************************
* 实现自定义的整数加法
*/
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毫秒。
#5
楼上的当N改为10或以上的时候,怎么程序没法运行啊?
#6
巨强的排列组合,应该有简单一点的办法,琢磨一下。
#7
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;
}
}
#8
感谢楼主,我初学者,顺便学习了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;
}
}
#9
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;
}
}
#10
用了7个for的程序肯定不可取。至少应该象4楼那样用数组表示。
#11
回答5楼:
楼上的当N改为10或以上的时候,怎么程序没法运行啊?
因为我就设定了数组a[9][]阿,也就是说从1~9个数字中取若干个数字
你N=10,。,。。。当然出错了,我没有写输入验证。
这个方法我觉得是比较简单的实现了,比7重循环好一些
楼上的当N改为10或以上的时候,怎么程序没法运行啊?
因为我就设定了数组a[9][]阿,也就是说从1~9个数字中取若干个数字
你N=10,。,。。。当然出错了,我没有写输入验证。
这个方法我觉得是比较简单的实现了,比7重循环好一些
#12
我开始也想用数组,可是由于我是初学,实在是没有想到怎么用数组输出每一种可能,只好用最笨的方法.我再看下4楼的.
#13
哦,我有点明白5楼的意思,忘了说明一点,我是默认取得数字是不能重复的,所以1~9数字不能取超过9个数字,如果可以重复的话,需要修改
getNum(int[] num)这个方法,
不好意思,题目要求我理解成不能重复的了,楼主请说的更清楚一些。
7重循环是最简单的实现方法,并不是说效率低,因为我的方法效率说不定还比不上用循环,主要是如果用循环来做的话,如果我要取的数字数目不定,就不好实现了
getNum(int[] num)这个方法,
不好意思,题目要求我理解成不能重复的了,楼主请说的更清楚一些。
7重循环是最简单的实现方法,并不是说效率低,因为我的方法效率说不定还比不上用循环,主要是如果用循环来做的话,如果我要取的数字数目不定,就不好实现了
#14
求教一下:你的代码放到eclipse中提示第一个类"错误设置了构造"请问可以解决一下吗?我才学java想把这个简单的方法学会搞明白,谢谢.
#15
恩,我想了老久,也没有想到怎么能把需要的数目由输入给定,没想到...
#16
啊?我也不了解了,我是从eclipse中复制过来的。。。。
#17
哇,不会吧,你的里面没问题,我的里面它给我一大片红色波浪线.
#18
试下我的吧,
我的你输入七个数,输入1到9,重复也行。
如果含有不是1到9就提示错误退出。
少于7个就数组下标越界了,没去判断了。
要控制长度也行啊,加个判断string的length就行了。
结果保存在文本里。
速度也不慢啊,
1000多个结果2秒多,跟4楼差不了多少,不过还是向4楼学习。
我的你输入七个数,输入1到9,重复也行。
如果含有不是1到9就提示错误退出。
少于7个就数组下标越界了,没去判断了。
要控制长度也行啊,加个判断string的length就行了。
结果保存在文本里。
速度也不慢啊,
1000多个结果2秒多,跟4楼差不了多少,不过还是向4楼学习。
#19
吃完饭我又修改了一下,把 getNum(int[] num)修改成:
就行了,其实要可以重复的话,更简单一些。
当N=10的时候输出太多,控制台放不下,可以自己修改一下,输出到文件中去。
回答17楼,我真的不知道为什么,我刚刚在实验室也是从帖子上把我的代码复制下来的,没有任何问题啊。
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楼,我真的不知道为什么,我刚刚在实验室也是从帖子上把我的代码复制下来的,没有任何问题啊。
#20
递归全排列各位
然后全排列出来的每一个组合对其可用的数值进行穷举
然后全排列出来的每一个组合对其可用的数值进行穷举
#21
递归算法。
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);
}
}
#22
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)
str="";
for(int i;i<value.lenth;i++)
str+="table"+value[i]+","
str2="select * form "+ str.substring(0,str.length-1)
query(str2)
#23
好码 保存 hoho
#24
#25
#26
回过的帖竟然在“我回复的帖子找不到”,shit。