| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2052 人关注过本帖
标题:给数字加密
只看楼主 加入收藏
蓝奕天
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-6-8
结帖率:50%
收藏
 问题点数:0 回复次数:4 
给数字加密
【提交文件】:strfun
【问题描述】
从前,有一个人人自危的时代,所有写给别人的信都得加密,某人给 1 至 20 的数设计了一
种加密方法:
f(1)=’A’
f(2)=’ABA’
f(3)=’ABACABA’
东莞启航科技团程序设计队辅导资料
……
给出一个字符串 s,若 f(n)=s,则这个字符串就是 n 的密文。现在给出一个数 n(1<=n<=20),
你能编成得出它对应的密文吗?
温馨提示:字符串数据类型 string 至多可以包含 255 个字符。当此题中的 n=20 时,长度
会很长。
【输入格式】
在输入文件 strfun.in 中,只有一个数 n(1<=n<=20)。
【输出格式】
在输出文件 strfun.out 中,只有数 n 对应的密文,不能有多余的空格或换行。
【输入样例】
3
【输出样例】
ABACABA
【注释】
对于80%的数据,n<10。 对于100%的数据,n<=20。
搜索更多相关主题的帖子: 数字 加密 文件 字符串 输入 
2019-06-15 17:11
蓝奕天
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-6-8
收藏
得分:0 
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int a[50],n,i,j,k,maxn=1;
string c[256];
int main()
{
    freopen("strfun.in","r",stdin);
    freopen("strfun.out","w",stdout);
    cin>>n;
    c[1]='A';
    c[2]="ABA";
    for (i=3;i<=20;i++)
    c[i]=c[i-1]+char(i+64)+c[i-1];
    cout<<c[n];
    fclose(stdin);
    fclose(stdout);
    return 0;
}
2019-06-15 17:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9030
专家分:54050
注 册:2011-1-18
收藏
得分:0 
温馨提示:字符串数据类型 string 至多可以包含 255 个字符。

听不懂!
f(20) 应当是 1M 长度(假如算上结尾的'\0'的话)

另外,你遇到什么问题了?
f(n,i)
{
    if i == (1<<(n-1))-1 then return 'A'
    if i < (1<<(n-1))-1 then return f(n-1,i)
    return f(n-1,   i- (1<<(n-1))     )
}
手机打字不方便,就是一个折半处理
2019-06-16 11:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9030
专家分:54050
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <cstdio>

char fi( size_t n, size_t index )
{
    if( n==0 || index>(1u<<n)-2 )
        return '\0';
    if( index < (1u<<(n-1))-1 )
        return fi( n-1, index );
    if( index > (1u<<(n-1))-1 )
        return fi( n-1, index - (1u<<(n-1)) );
    return 'A' + n-1;
}

void f( size_t n )
{
    for( size_t i=0; i!=(1u<<n)-1; ++i )
        putchar( fi(n,i) );
}

int main( void )
{
    f(1); putchar('\n');
    f(2); putchar('\n');
    f(3); putchar('\n');
    f(4); putchar('\n');
    f(5); putchar('\n');
    f(6); putchar('\n');
}
2019-06-17 09:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9030
专家分:54050
注 册:2011-1-18
收藏
得分:0 
当然,用 std::string 那就简单了

程序代码:
#include <iostream>
#include <string>
using namespace std;

std::string f( size_t n )
{
    std::string result;
    for( size_t i=0; i!=n; ++i )
        result = result + char('A'+i) + result;
    return result;
}

int main( void )
{
    cout << f(1) << '\n';
    cout << f(2) << '\n';
    cout << f(3) << '\n';
    cout << f(4) << '\n';
    cout << f(5) << '\n';
    cout << f(6) << '\n';
}

2019-06-17 09:21
快速回复:给数字加密
数据加载中...
 
   



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

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