当前位置: 代码迷 >> J2SE >> 有个很难的有关问题请问大神!
  详细解决方案

有个很难的有关问题请问大神!

热度:118   发布时间:2016-04-23 20:23:34.0
有个很难的问题请教大神!!!急急急急!
以下问题不知道如何实现:
1.七个数,每位数取值0—9之间。(类似七星彩彩票)。然后代码会自动计算出所有的组合的情况并输出,如(1.1.1.1.1.1.1~~~~~~9.9.9.9.9.9.9)之间
:我有个思路,不知道对不对。用七个for循环进行嵌套
for(int i=0;i<10,i++){
    for(int j=0;j<10,j++){
         .....一共七个for循环

但是问题是我不知道如何把他们以数组的方式输出来,而且是所有结果;例如:全部组合结果为:n条,第一条结果为1111111,第二条结果为:1111112~~~~一直到最后一条。

第二个问题我觉得更复杂了。。。要求用户输入一个int数,假如是(34)。
然后从第一个问题里筛选出所有七位数加起来和等于(34)的排列组合。

第三个问题我头都快炸了。输出所有 3个数以上不相等的组合。(买彩票基本不可能出现三个号码都一样)。

诚心求教,真是难死了·~~呜呜呜


------解决方案--------------------

public void printNumbers(){
for(int i=0;i<10000000;i++){
System.out.println(String.format("%07d", i));
}
}

------解决方案--------------------
我给楼主提供个思路,仅供参考,我用的是8位数,9位数时间较长,但原理一样
package test;
public class Mytest {
public static void main(String[] args) {
int a[]=new int[9*9*9*9*9*9*9*9];//8位数
int i,temp,ii=0;
boolean flag=true;
String ss="";
char[] cc;
int len=100000000-11111111;
for(i=0;i<len;i++){
flag=true;
temp=i+11111111;
ss=String.valueOf(temp);
cc= ss.toCharArray();
for(int j=0;j<ss.length();j++){
if(cc[j]=='0')
flag=false;
}
if(flag){
a[ii++]=temp;

}
}
System.out.println(a[0]);
System.out.println(a[ii-1]);

}

}

------解决方案--------------------
有不懂问我,代码合乎要求,因为一直敲到夜里实在不想写注释了,就这样了。
package Applet;

import java.util.ArrayList;

public class T {
public static void getAllDataNotNeed(){
String saveDataToString;
ArrayList<String> allDataNoNeed=new ArrayList();
for(int i=1111111;i<=1119999;i++){
int[] digitalMumber=new int[7];
int[] arr=new int[9];
saveDataToString=String.valueOf(i);
int count=0;
for(int j=0;j<saveDataToString.length();j++){
digitalMumber[j]=(int)saveDataToString.charAt(6-j)-48;
// you should care there
if(digitalMumber[j]!=0){
count++;
}
}
if(count!=7){
allDataNoNeed.add(saveDataToString);

}else{
for(int j=0;j<saveDataToString.length();j++){
arr[digitalMumber[j]-1]++;
if(arr[digitalMumber[j]-1]>2){
allDataNoNeed.add(saveDataToString);
break;

}
}
}
}

for(int k=0;k<allDataNoNeed.size();k++){
//System.out.println(1);
System.out.println(allDataNoNeed.get(k));
}
}
public static void getValueWanted(int valueWanted){
String saveDataToString;
for(int i=1111111;i<=1119999;i++){
int[] digitalMumber=new int[7];
int[] arr=new int[9];
saveDataToString=String.valueOf(i);

int sum=0;
int count=0;
for(int j=0;j<saveDataToString.length();j++){
digitalMumber[j]=(int)saveDataToString.charAt(6-j)-48;
// you should care there
if(digitalMumber[j]!=0){
count++;
}
}
if(count==7){
for(int j=0;j<saveDataToString.length();j++)
sum+=digitalMumber[j];

}
if(sum==valueWanted){
System.out.println("sum is "+valueWanted+" : "+saveDataToString);
}
}
}
public static void main(String[] args){
// String s="1231231";
// System.out.println((int)s.charAt(2)-48);
getAllDataNotNeed();
//输出所有不需要的组合
//因为需要的组合太多只能以相反的代替
getValueWanted(34);
//输入你想要得到的和值

}

}
  相关解决方案