1 题目要求
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:
输入在一行中给出A。
输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
2 样例
输入样例:
2
输出样例:
234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
3 分析
(1)根据样例分析总体结构——
共3位数,每位数从[a,a+1,a+2,a+3]中选择,且每个三位数中的三个数字不重复。
据此,应设定3个循环,这三个循环有先后顺序且嵌套。
(2)第一个循环控制百位数,只要保证在区间内就行。
(3)第二个循环控制十位数,不能与百位数相同
(4)第三个循环控制个位数,不能与百位,十位数相同
(5)数据结构——
需要根据循环和判断来确定各个位上的数,每到达一层循环时的数 的位数不相同
——这决定了更新这一位的数时是采用替换replace(start,end,string)还是添加append(obj)
——每次输入完一个三位数,需要将输出的 串 置为空setLength(0)
所以采用StringBuilder——
特点:
1,长度是可变化的。
2,可以字节操作多个数据类型。
3,最终会通过toString方法变成字符串。
4 代码
import java.util.Scanner;
class Main
{
public static void printSet(int num)
{
StringBuilder sb=new StringBuilder();
int count=0;
if(num<=6)
{
for (int i=num;i<=num+3;i++)
{
sb.append(i);
for(int j=num;j<=num+3;j++)
{
if(j!=i)
{
if(sb.length()==1)
sb.append(j);
else//
sb.replace(1,2,new Integer(j).toString());
for(int k=num;k<=num+3;k++)
{
if(k!=i&&k!=j){
if(sb.length()==2)
sb.append(k);
if(sb.length()==3)
sb.replace(2,3,new Integer(k).toString());
count++;
if(count%6==0)
{
System.out.println(sb);
// break;
}
else
{
System.out.print(sb+" ");
// break;
}
}
}
}
}
sb.setLength(0);
}
}
}
public static void main(String []args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
printSet(num);
}
}
5 总结
(1)java的键盘录入
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
(2)循环结构
(3)StringBuilder:
append()
replace()
setLength()
length()