| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 778 人关注过本帖
标题:懂递归的同学请进来帮帮忙!
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
ls的效率真低
程序代码:
#include <stdio.h>
#include <stdlib.h>
int a[27] = {0}, begin, end;
void dfs(int i, int len)
{
    if (len == 0)
    {
        for (i = begin; i <= end; ++i)
            if (a[i]) putchar('a' + i - 1);
        putchar('\n');
    }
    for (; i <= end; ++i)
    {
        if (a[i] == 0)
        {
            a[i] = 1;
            dfs(i + 1, len - 1);
            a[i] = 0;
        }
    }
}
int main(void)
{
    int len;
    while (scanf("%d%d%d", &begin, &end, &len) != EOF)
    {
        int nlen;
        dfs(begin, len > (nlen = end - begin + 1) ? nlen : len);
    }
    return 0;
}

starwing@starwing-desktop:~/test_c/bin$ echo '1 26 10' | time ./outcome > /dev/null
4.24user 0.02system 0:04.27elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+139minor)pagefaults 0swaps
starwing@starwing-desktop:~/test_c/bin$ echo '1 26 10' | time ./output > /dev/null
1.83user 0.01system 0:01.87elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+139minor)pagefaults 0swaps



专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-23 14:12
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
回复 11楼 StarWing83
效率再高你还是找不到工作。

生命不熄,战斗不止.
2009-08-23 14:15
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
我本来就找不到工作嘛,关[bo]你的[/bo]效率什么事,不管再什么位置,都是不能放弃虚心求学的精神的嘛

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-23 14:24
guopeng2324
Rank: 2
等 级:论坛游民
帖 子:11
专家分:15
注 册:2009-6-17
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void f(int *a,int end,int n,int x,int y);
int main(void)
{
    int start,end,num,n;
    int *a;
    scanf("%d %d %d",&start,&end,&num);
    n=(end-start+1)<num?(end-start+1):num;
    a=(int *)malloc(sizeof(int)*n);
    f(a,end,n,start,0);
    getch();
    return EXIT_SUCCESS;
}
void f(int *a,int end,int n,int x,int y)
{
    int i;
    a[y]=x;
    if(y==n-1)
    {
        for(i=0;i<n;i++)
            putchar(a[i]+'a'-1);
        printf("\n");
    }
    else
        if(y+1<n&&x+1<=end)
            f(a,end,n,x+1,y+1);
    if(x+1<=end)
        f(a,end,n,x+1,y);
    else
        return;
}


[ 本帖最后由 guopeng2324 于 2009-8-23 14:54 编辑 ]
2009-08-23 14:53
快速回复:懂递归的同学请进来帮帮忙!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017712 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved