黑马程序员技术交流社区
标题:
求助,求思想,求代码
[打印本页]
作者:
胡滨
时间:
2013-4-11 19:14
标题:
求助,求思想,求代码
本帖最后由 胡滨 于 2013-4-11 22:15 编辑
问题户又来求助了。
{:3_65:}
/*
一个四位数1587,取出其千位、百位、十位、个位四个数字
输出这四个数所能组合出的所有的两位数
思路:
1.定义四个int,分别存放千位、百位、十位、个位
2.组合四个数字。。。。(不会)
*/
public class PrintDemo {
public static void main(String[] args) {
int i=1587;
int a=i/1000;
int b=i/100-10*a;
int c=i/10-100*a-b*10;
int d=i%10;
//水平有限,没想出思路
}
}
复制代码
作者:
U芽Lady
时间:
2013-4-11 19:46
public static void main(String[] args){
int i=1587;
int [] a = new int[4];
String [] s = new String[12];//用来储存两个数字的组合
int n = 0;//记录
//遍历这个四位数各个位数的值
for(int j = 0;j < a.length; j++){
a[j] = i % 10;
i = i / 10;
}
//输出这四个数字
for(int j = 0; j < 4; j++){
System.out.println(a[j]);
}
//这四个数字任意两个的组合
for (int j = 0;j < 4 ;j++ ){
for(int k = j + 1; k < 4;k++){
s[n] = "" + a[j] + a[k];
n ++;//有几个这样的数字
}
}
//输出任意两个数字的组合
for(int j = 0; j < n; j++){
System.out.println(s[j]);
}
}
我是这个样子想的,希望对你有帮助
作者:
孙金鑫
时间:
2013-4-11 20:02
import java.util.*;
class Demo
{
public static void main(String[] args)
{
method(1587);
}
public static void method(int x)
{
int m=0; //用于存放two数组角标
int[] arr = new int[4]; //定义一个新数组arr,用于存放1587这个数值的单个数字;
int[] two = new int[arr.length*arr.length]; //定义一个新数组two,用于存放最后生成的两位数
for(int y=0;y<arr.length;y++)
{
arr[y]=x%10; //把单个数,存放到arr中
x=x/10;
}
for(int z=0;z<arr.length;z++) //两个循环嵌套。。用于两位数的组合;注意:若三位数,就是三层循环嵌套了……
{
for(int y=0;y<arr.length;y++)
{
two[m]=arr[z]*10+arr[y];
m++;
}
}
System.out.println(Arrays.toString(two));;
}
}
作者:
蓝色骨头
时间:
2013-4-11 20:43
我对题目的理解是这样的,组成四位数的数组组成的不重复两位数个数。
数字的开头不能为0.
因为要求不重复,使用HashSet
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 1123;
HashSet<Integer> hashSet = new HashSet<Integer>();
char[] ch = Integer.toString(n).toCharArray();
for(int i = 0; i < ch.length; i++){
for(int j = 0; j < ch.length; j++){
if(ch[i] != '0'){
hashSet.add((ch[i]-'0')*10+(ch[j]-'0'));
}
if(ch[j] != '0'){
hashSet.add((ch[j]-'0')*10+(ch[i]-'0'));
}
}
}
System.out.println(hashSet);
}
复制代码
作者:
通行天下
时间:
2013-4-11 20:45
import java.util.Scanner;
class PrintData
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("请输入一个四位的正整数:");
int n = in.nextInt();
int a=n/1000;
int b=n/100-10*a;
int c=n/10-100*a-b*10;
int d=n%10;
int[] arr = new int[4];
arr[0] = a;
arr[1] = b;
arr[2] = c;
arr[3] = d;
for(int i=0;i<3;i++)
{
for(int j=i+1;j<4;j++)
{
System.out.println(arr[i]*10+arr[j]);
System.out.println(arr[i]+arr[j]*10);
}
}
}
}
不好意思啦,能力实在是有限,只能排出各位都不相同的组合来啊!
复制代码
作者:
嘟嘟123
时间:
2013-4-11 21:48
本帖最后由 嘟嘟123 于 2013-4-11 21:51 编辑
public class T8 {
/**
* 思想:将1587看成字符串,将字符串转化成字符,然后遍历所有元素并按要求输出
* @param args
*/
public static void main(String[] args) {
String ss = "1587";
char[] cc=ss.toCharArray();
System.out.println("随机组合后的两位数分别为:");
for (char c : cc) {//遍历,因为要求两位,故遍历两遍
for (char c1 : cc) {
if (c != c1) {//组合时,数字在两位中任意一位上出现,则在另一位上不再出现
System.out.print(""+c+c1+"\t");//先转换成字符串,后运算
}
}
}
}
}
复制代码
1233.jpg
(20.63 KB, 下载次数: 52)
下载附件
2013-4-11 21:49 上传
作者:
陈圳
时间:
2013-4-11 22:32
public static void main(String[] args) {
permute("abc");
}
public static void permute(String str){
int x=0;//要细化这里,这里必须对应几个变量进行位移,暂时不优化.
int y=0;
int z=0;//三个转换值
int n=0;//控制换行,
int index=1;//控制转换
char[] chs=str.toCharArray();
//具体跑多少次,这个计算不出来.所以用while循环,用break跳出.
while(true){
if(y==0&&z==0){
System.out.print(""+chs[x]+chs[y]+chs[z]+" ");
n++;
}
if(y<str.length()&&z<str.length()){
if(y==z)
z++;
else if(y<z)
y=z+(z=y)*0;//俩数交换;
else if(y>z)
z++;
}
if(index<=str.length()){//1,2,3
System.out.print(""+chs[x]+chs[y]+chs[z]+" ");
if(y==(str.length()-1)&&z==(str.length()-1)){//循环完毕要交换需要组合的单词
if(index<str.length()){
char temp = chs[0];
chs[0] = chs[index];
chs[index] = temp;
index++;
} else {
index=0;
}
x=y=z=0;
}
}
if(index==0)
break;
n++;
if(n%10==0)
System.out.println();
}
}
复制代码
这个可以实现你要的,但是我是根据我的需求做的,你需要修改.
用穷举实现的各种组合,代码写得比较乱,涉及很多条件控制.
打印结果:
aaa aab aba abb abc acb acc bbb bba bab
baa bac bca bcc ccc cca cac caa cab cba
cbb
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2