当前位置: 代码迷 >> C语言 >> 关于动态分配+算法
  详细解决方案

关于动态分配+算法

热度:470   发布时间:2008-05-05 16:11:50.0
关于动态分配+算法
实现这样一个函数:   
输入A-Z其中一个字母,比如你输入A那么就输出A,输入B就输出ABA  

   INPUT:      OUTPUT:   
     A           A   
     B           ABA   
     C           ABACABA   
     D           ABACABADABACABA   
     E           ABACABADABACABAEABACABADABACABA  
代码::
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include <string.h>
//#define NULL 0
//char p[100]={0};

int main()
{
    char letter,*p;
    int i,size;
    scanf("%c",&letter);
    if(letter<65||letter>90)
        printf("Error\n");
    else
    {
        for(i=1;i<=letter-64;i++)
        {
            size=(int)pow(2,i);
            p = (char *)malloc(size+1);
            if(p!=NULL)
            {
            if(i==1)
            {
                p[0]=i+64;
                p[1]='\0';
            }
            else
            {
                for(int k=0; k<size/2-1; k++)
                {
                    p[k] = p[k];
                    p[size/2+k] = p[k];
            
                }
                p[size/2-1] = i+64;
            }
            }
        
        }
    }
    puts(p);
    free(p);
    return 0;
}

我用固态分配数组空间,可以实现的(算法应该正确),但要p[2^26]这么大的空间,浪费!
用动态分配(代码如上),怎么输出乱码?怎么回事????
求高人!
搜索更多相关的解决方案: 算法  动态  include  ABA  int  

----------------解决方案--------------------------------------------------------
用飞燕的代码高亮,怎么没亮起来!
郁闷了!偶水平太次了!
----------------解决方案--------------------------------------------------------
像二叉树的中序遍历....
----------------解决方案--------------------------------------------------------
hehe
----------------解决方案--------------------------------------------------------
恩!sunkaidong,帮我看下!
----------------解决方案--------------------------------------------------------
人呢?
晚上回来再看!
----------------解决方案--------------------------------------------------------
#include <iostream>
using namespace std;
typedef struct binarytree
{
    char c;
    struct binarytree *plchild;
    struct binarytree *prchild;
}btr;
void  bbtr(btr *p,int i)
{   
     
     p->c='A'+i;
     p->plchild=NULL;
     p->prchild=NULL;
     if(i>0)
     {
     p->plchild=(btr *)malloc(sizeof(btr));
     p->prchild=(btr *)malloc(sizeof(btr));
     bbtr(p->plchild,i-1);
     bbtr(p->prchild,i-1);
     }
}

void  bbtrs(btr *p)
{   
    
     if(p!=NULL)
     {
        bbtrs(p->plchild);
        printf("%c",p->c);
        bbtrs(p->prchild);
        
     }
}
int  main()
{   
    btr *p;
    char c;
    p=(btr *)malloc(sizeof(btr));
    cout<<"请输出大写字母."<<endl;
    cin>>c;
    bbtr(p,c-'A');
    bbtrs(p);
    return 0;
   
}

[[it] 本帖最后由 sunkaidong 于 2008-5-5 17:16 编辑 [/it]]
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <ctype.h>

void p(char c)
{
    if (c=='A')putchar('A');
    else {p(c-1);putchar(c);p(c-1);}
}

int main()
{
    char ch=getchar();
    if(!isupper(ch))
        printf("error.");
    else
        p(ch);
    putchar('\n');
    return 0;
}


try this!
----------------解决方案--------------------------------------------------------
ls真快。。。
我刚看到准备用递归做你就发出来了
----------------解决方案--------------------------------------------------------
这种题第一感觉就是递归吧……
----------------解决方案--------------------------------------------------------