关于动态分配+算法
实现这样一个函数: 输入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;
}
#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]这么大的空间,浪费!
用动态分配(代码如上),怎么输出乱码?怎么回事????
求高人!
----------------解决方案--------------------------------------------------------
用飞燕的代码高亮,怎么没亮起来!
郁闷了!偶水平太次了!
----------------解决方案--------------------------------------------------------
像二叉树的中序遍历....
----------------解决方案--------------------------------------------------------
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真快。。。
我刚看到准备用递归做你就发出来了
----------------解决方案--------------------------------------------------------
这种题第一感觉就是递归吧……
----------------解决方案--------------------------------------------------------