回 帖 发 新 帖 刷新版面

主题:(求助)狗狗的城堡

Description 
终于到小岛了,小岛上绿茵遍地,风景如画,大家都兴奋的到处去玩了,只有狗狗一个人趴在地上。原来狗狗发现了一堆一样大小的砖头,狗狗很喜欢玩搭积木,就想在小岛上建一个漂亮的城堡。不过首先狗狗想为城堡建一个标志建筑,为了节约砖头,狗狗决定这个建筑的厚度只要一层。那么,请你帮狗狗想想,N块砖头可以搭多少种不同样式的建筑呢?注意: 建筑必须是连续的。
Input 
输入砖头的数量N(2<=n<=20)
Output 
输出所有样式的数字表示。
1代表一块砖,2代表2块叠加,依次类推
1 1 1 1代表4块砖头连续摆放
Sample Input 
4
Sample Output 
1 1 1 1
1 1 2
1 2 1
1 3
2 1 1
2 2
3 1
4


这个题目怎么解决啊,麻烦高手用C++写一个

回复列表 (共4个回复)

沙发

还没学C++ ,用C编的,不过我想C跟C++差不多吧,自己再换成C++
# include<stdio.h>
void main()
{
void plus(int,int *p);
  int a[20],n,i;
  scanf(“%d”,&n);
  printf(“%d\n”,n);
  for(i=1;i<=n-1;i++)
  {
     a[0]=i; a[1]=n-a[0];
     plus(1,a);
  }
}
void plus(int i,int *p)
{
   int m,k;
   for(m=0;m<=i;m++)
   printf("%3d",p[m]);
   printf("\n");
   k=p[i];
   for (m=1;m<=p[i]-1;m++)
   {
     p[i++]=m; p[i]=k-p[i-1];
     plus(i,p);
   }
}
在Turbo C&C++ 3.0 编译通过
如果输入的n超过20,将a[20]里的20改成你想要输入的最大数

板凳

不行啊,你这个算法不行,每次递归后只是往前加一,从示例中的答案来看就不行

3 楼

#include<iostream>
using namespace std;

int way[20];
int sum=0;
int step=0;

void compute_way(int n);

int main()
{
    int n;
    while(cin>>n)
    {
        compute_way(n);    
    }
    return 0;
}

void compute_way(int n)
{

    if(sum==n)
    {
        for(int i=0;i<step;i++)
            cout<<way[i]<<" ";
        cout<<endl;
        return ;
    }
    if(sum>n)
    {
        return ;
    }
    if(sum<n)
    {
        for(int j=1;j<=n;j++)
        {
            if((sum+j)<=n)
            {
                sum=sum+j;
                way[step]=j;
                step++;
                compute_way(n);
                sum=sum-j;
                step--;
            }
        }
    }
}
递归回溯法

4 楼

我的pascal程序:
program ex;
  var
    n:integer;
    a:array[1..18]of integer;
  procedure f(m,k:integer);
    var
      i,j:integer;
    begin
      if m>=1 then
        for i:=1 to m do
          begin
            a[k]:=i;
            f(m-i,k+1);
          end
      else begin
        for j:=1 to k-2 do write(a[j],' ');
        writeln(a[k-1]);
      end;
    end;
  begin
    readln(n);
    f(n,1);
  end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册