| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 692 人关注过本帖
标题:算法实现题1.2(探讨)
只看楼主 加入收藏
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
结帖率:75%
收藏
已结贴  问题点数:5 回复次数:6 
算法实现题1.2(探讨)
程序代码:
算法实现题1-2 
1.问题描述:在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A由26个小写英文字母组成,即A={a, b, ..., z}.该字母表产生的升序字符串是指字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最大出现1次.
     例如a, b, ab, bc, xyz等字符串都是升序字符串.现在对字母表A产生的所有长度
     不超过6的升序字符串按照字典序排列并编码
     1   2   ... 26  27  28  ...
     a   b   ... z   ab  ac  ...
     对于任意长度不超过6的升序字符串,迅速计算它在上述字典中编码
2.算法设计:对于给定的长度不超过6的升序字符串,计算它在上述字典中编码
3.数据输入:输入数据由文件名input.txt的文本文件提供.文件的第1行是一个正整数k,表示接下来共有k行.在接下来的k行中,每行给出一个字符串
4.结果输出:将计算结果输出到文件output.txt.文件共有k行,每行对应一个字符串的编码
            输入文件示例                   输出文件示例
            input.txt                        output.txt
            2
            a                                1
            b                                2


[ 本帖最后由 大蛇丸_ 于 2013-6-14 01:46 编辑 ]
搜索更多相关主题的帖子: 字符串 字母表 数据加密 英文字母 
2013-06-13 00:14
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:2 
我的第一反应是看做一个进位计数的过程,

当然如果考虑到字符不重复和升序字符串的要求,还得加点细节上的限制。


大神们不喜勿喷。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-13 02:25
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
只想听鼓励赞美不愿意接受批评如何能够进步?真正掌握技术的人脾气好的不多。你的目的是获得他们的技术,那接受他们的批评就是要付出的代价的一部分。

这个问题的时间复杂可以做到O(|S|),S是字符串的长度。但我还是想鼓励楼上的小黑猫,尝试把你的想法实际写成代码。

重剑无锋,大巧不工
2013-06-13 08:46
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
收藏
得分:2 
第一反应是一个比较愚蠢的办法,定义数组a…z,然后进位暴搜。手机党飘过。!
应该还有更好的算法。一起讨论,更想知道b版的思想!!学习学习!

一同学习, 一同进步
2013-06-14 01:39
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

int f(int i,int k) {
    int sum = 0, j;
    if(k == 1) return 1;
    for(j = i + 1; j <= 26; j++) sum += f(j, k - 1);
    return sum;
}

int g(int k) {
    int sum = 0, i;
    for(i = 1; i <= 26; i++) sum += f(i, k);
    return sum;
}

int change(char c) {
    return c - 'a' + 1;
}

int order(char s[]) {
    int k = strlen(s), i, t, len, j;
    int sum = 0, temp = 0;
    for(i = 1; i < k; i++) sum += g(i);
    for(i = 1; i < change(s[0]); i++) sum += f(i, k);
    for(i = 1, temp = change(s[0]); i < k; i++) {
        t = change(s[i]);
        len = k - i;
        for(j = temp + 1; j < t; j++) sum += f(j, len);
        temp = t;
    }
    return sum + 1;
}

int main() {
    char s[1000];
    for( ; gets(s); printf("%d\n", order(s))) ;
    return 0;
}

冷静....!
2013-06-15 15:23
zyh6110
Rank: 1
等 级:禁止发言
帖 子:10
专家分:5
注 册:2013-6-15
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2013-06-15 15:28
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
收藏
得分:0 
楼上又一SB....鉴定完毕!...

冷静....!
2013-06-15 15:32
快速回复:算法实现题1.2(探讨)
数据加载中...
 
   



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

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