学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

关于动态分配+算法

引用:
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
#include <string.h>

int main(void)
{
    char c;
    while (scanf(" %c", &c)!=EOF
            
&& (c>='A'&&c<='Z'|| c>='a'&&c<='z') )
    {
        int str[30]={1};
        int n=c-'a',d=0;
        if (c<='Z')n=c-'A';
        while (d<=n)
        {
            putchar('A'+d);
            ++str[0];
            for (d=0; str[d]>1; ++d)
            {
                ++str[d+1];
                str[d] = 0;
            }
        }
        putchar('\n');
    }
    return 0;
}
这是其中一种,其实还有一种看似比较变态的方法,BT的二进制



[ 本帖最后由 雨中飛燕 于 2008-5-5 19:02 编辑 ]
C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

还是有规律的``

>A字母```的排列都是:  前一个字母的  当前字母  前一个字母的

有对称性的``
女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
www.yzfy.org    yzfy.5d6d.com

TOP

for (d=0; str[d]>1; ++d)
{
      ++str[d+1];
      str[d] = 0;
}
这个很巧妙啊
“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!

TOP

引用:
#include <stdio.h>
#include <ctype.h>
#include <math.h>

int main()
{
    char ch;
    while (scanf(" %c",&ch)!=EOF && isalpha(ch))
    {
        long m,em=1<<(toupper(ch)-'A'+1);
        for (m=1;m<em;m++)
            putchar((char)('A'+(float)log(m&-m)/log(2)));
        putchar('\n');
    }
}
看看这个……

[ 本帖最后由 StarWing83 于 2008-5-5 19:50 编辑 ]
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

哈哈哈,刚刚写出来的,特有成就感的说………………
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

你这样写会比直接循环还要慢。。。。

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

引用:
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
#include <string.h>
int BinSearch(int n)
{
    int nl=1,nr=32,nm=16;
    if (n&1)return 0;
    for (;nl<nr;nm=(nl+nr+1)>>1)
    {
        if (n&((1<<nm)-1))
            nr=nm-1;
        else
            
nl=nm;
    }
    return nl;
}
int main(void)
{
    char c;
    while (scanf(" %c", &c)!=EOF
            
&& (c>='A'&&c<='Z'|| c>='a'&&c<='z') )
    {
        int n=c-'a',d=0,e;
        if (c<='Z')n=c-'A'; //toupper
        e = 2<<n;
        for (d=1;d<e;++d)
        {
            putchar('A'+BinSearch(d));
        }
        putchar('\n');
    }
    return 0;
}
来一个二分

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

慢是因为2^n求n的过程。这个怎么快速求呢?
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

二分就很快了

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

要命的程序,刚才死机了

#include <stdio.h>
#include <ctype.h>
#include<math.h>
void p(char c)
{   int inc=1;
    double re=pow(2,(c-'A'+1));
       while(re>inc)
    {
        int j=inc++;
        int i=0;
        while(!(j&1)){j=j>>1;i++;};
        putchar('A'+i);
    };
       
}
int main()
{
    char ch=getchar();
    if(!isupper(ch))
        printf("error.");
    else
        p(ch);
    putchar('\n');
    return 0;
}

[ 本帖最后由 sunkaidong 于 2008-5-5 21:01 编辑 ]
学习需要安静。。海盗要重新来过。。

TOP

发新话题