目录
前言
回溯法:又称试探法
从问题的某一种初始状态出发,搜索从这种状态出发所能达到的所有状态,当一条路走到“尽头”的时候(不能再前进),再后退一步或若干步,从另一种可能的状态出发,继续搜索,直到所有的“路径”(状态)都试探过为止。
一、菱形图案
问题描述:
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。
输入:
多组输入,一个整数(2~20)。
输出:
针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。每输出一个菱形的后面需要空一行。
样例输入 :2 3 4
样例输出 :
*
* *
* * *
* *
*
*
* *
* * *
* * * *
* * *
* *
*
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
解决代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc =new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();
sort(n,n);
System.out.println();
}
}
static void sort(int n,int j) {
if(n==0)
{
for(int i=0;i<n;i++)
{
System.out.print(" ");
}
for(int i=n;i<=j;i++)
{
System.out.print("*");
System.out.print(" ");
}
System.out.println();
return;
}
else
{
for(int i=0;i<n;i++)
{
System.out.print(" ");
}
for(int i=n;i<=j;i++)
{
System.out.print("*");
System.out.print(" ");
}
System.out.println();
sort(n-1,j++);
for(int i=0;i<n;i++)
{
System.out.print(" ");
}
for(int i=n;i<=j-1;i++)
{
System.out.print("*");
System.out.print(" ");
}
System.out.println();
}
}
}
二、牛妹的蛋糕
题目描述:
众所周知,牛妹非常喜欢吃蛋糕。第一天牛妹吃掉蛋糕总数三分之一多一个,第二天又将剩下的蛋糕吃掉三分之一多一个,以后每天吃掉前一天剩下的三分之一多一个,到第n天准备吃的时候只剩下一个蛋糕。牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?
输入:
输入n,0<n< 30。
输出:
输出第一天蛋糕的数量。
样例输入 :2