注册 登录
编程论坛 C++教室

c primer plus 程序清单7.13 分析不出 请教

asqx123456 发布于 2016-03-11 16:24, 2658 次点击
#include<iostream>
const int Len=66;
const int Divs=6;
void subdivide (char ar[],int low,int high,int level);
int main()
{
  char ruler [Len];
  int i;
  for(i=1,i<Len-2;i++)
 ruler[i]=' ';  
ruler[Len-1]= '\0 ';
    int max =Len-2;
    int min=0;
    ruler[min]=ruler[max]='|';
    std::cout<<ruler<<std::endl;
   for (i=1;i<=Divs;i++)
   {  
      subdivide(ruler,min,max,i);
      std::cout <<ruler<<std::endl;
      for (int j=1;j<Len-2;j++)
      ruler[j]=' ';

   }
   return 0;

    }

   void subdivide(char ar[],int low,int high,int level)
{
  if(level==0)
   return 0;
  int mid=(high+low)/2;
 ar[mid]='|';
 subdivide(ar,low,mid,level-1);
 subdivide(ar,mid,high,level-1);
}
8 回复
#2
rjsp2016-03-11 16:27
首先,你得告诉别人“c primer plus 程序清单7.13”的题目要求是什么?
#3
asqx1234562016-03-11 16:43
回复 2楼 rjsp
是一个由"|"符号组成的一个图案
编写出来以后的图案是:
|                                                               |
|                               |                               |
|               |               |               |               |
|       |       |       |       |       |       |       |       |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#4
hjx11202016-03-11 21:15
比较复杂的递归
#5
asqx1234562016-03-11 21:29
回复 4楼 hjx1120
是啊, 看得我头都疼了, 何况我还是个学了不到10天的新手!!!
#6
hjx11202016-03-12 16:08
回复 5楼 asqx123456
一个新手10天看七章,这是把这书当小说看的节奏呀!
这本书一共才十八章,楼主是人才啊
#7
rjsp2016-03-14 09:08
以下是引用asqx123456在2016-3-11 16:43:00的发言:

是一个由"|"符号组成的一个图案
编写出来以后的图案是:
|                                                               |
|                               |                               |
|               |               |               |               |
|       |       |       |       |       |       |       |       |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    const unsigned level = 7;

    for( unsigned i=0; i!=level*((1u<<(level-1))+2); ++i )
    {
        unsigned r = i/((1u<<(level-1))+2);
        unsigned c = i%((1u<<(level-1))+2);

        if( c+1 == ((1u<<(level-1))+2) )
            cout << '\n';
        else if( c%(1u<<(level-1-r)) == 0 )
            cout << '|';
        else
            cout << ' ';
    }

    return 0;
}

#8
wmf20142016-03-14 11:23
此题原来有人发过的,其实不就是不断二分,提供另一个方法(换成递归也很简单)
程序代码:
#include <stdio.h>
int main()
{
    int i=0,j=64;
    while(j)
    {
        if(i%j)
            printf(" ");
        else
            printf("|");
        i++;
        if(i==65)
        {
            j/=2;
            printf("\n");
            i=0;
        }
    }

}
#9
yangfrancis2016-03-14 18:42
//使用递归
#include<iostream>
#include<stdlib.h>
using namespace std;
const short SPAN=64;
short line=1;
void Recursion(short width)
{
    while(line<SPAN+1)
    {
        for(short i=1;i<=width;i++)
        {
            if(i!=width)
                cout<<' ';
            else
                cout<<'|';
            line++;
        }
    }
    if(width!=1)
        cout<<endl<<'|';
    line=1;
    if(width>1) Recursion(width/2);
}
int main()
{
    cout<<'|';
    Recursion(64);
    system("pause");return 0;
}
1