m0_62746615 2022-10-30 09:17 采纳率: 85%
浏览 154
已结题

怎么样用C语言写这个程序

艾迪设计了一个字符串编码算法,把一个字符串S编码为另一个字符串,本题字符串中的字符均为a-z的小写字母。
他设计了一个函数FS(c),将该字符串S的某个字符c映射为另一个字符。该函数定义为:
FS(c)=chr(G(c,S))
其中G(c,S)表示字符c在字符串S中最后一次出现的位置后面不重复字符的个数。例如若S="abcaedef",则G(′a′,S)=3,因为字符'a'在S中最后一次出现的位置是3,该位置后有4个字符,但有2个'e',故不重复的字符为3个,即'e'、'd'和'f'。函数chr(i)为第i+1个小写字母,例如chr(0)=′a′, chr(1)=′b′, chr(25)=′z′。故对于S="abcaedef"有FS(′a′)=chr(G(′a′,S))=chr(3)=′d′。
艾迪的编码算法即:依次将S中的每一个字符c替换为FS(c)。例如"abc"对应的编码为"cba",因为'a'在字符串最后一次出现的位置后面有2个不重复的字符'b' 和'c',故其FS值为第3个小写字母'c';'b'在字符串最后一次出现的位置后面有1个不重复的字符'c',故其FS值为第2个小写字母'b';'c'在字符串最后一次出现的位置后面有0个字符,故其FS值为第1个小写字母'a'。同理,"aacc"的编码为"bbaa","cac" 的编码为"aba"。
现给定一个字符串,请基于艾迪的算法编写程序,输出其编码后的字符串。
输入格式:
输入为一个字符串S。字符串长度不超过105。字符串中的字符为a-z的小写字母。
输出格式:
输出一个字符串,表示编码后的字符串。
输入样例1:
aca
输出样例1:
aba

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-10-30 09:29
    关注

    挺有意思,其实主要是写G(c,s)函数,可以从字符串右侧开始统计字符个数,定义一个长度为26的整型数组,初始化为0。,遇到'a',则第0个元素值设置为1,最后数一下26个元素中有多少个1,或者累加结果即可。

    #include  <stdio.h>
    #include <string.h>
    int G(char c,char *S)
    {
        int a[26] = {0},num=0;
        int len = strlen(S);
        for(int i=len-1;i>=0;i--)
        {
            if(S[i] != c)
            {
                if(a[S[i]-'a'] == 0)
                {
                    num++;
                    a[S[i]-'a'] = 1;
                }
            }
            else
                break;
        }
        return num;
    }
    
    char FS(char c,char *S)
    {
        return 'a' + G(c,S);
    }
    
    int main()
    {
        char a[106] = {0};
        gets(a);
        int i=0;
        while(a[i] != '\0')
        {
            a[i] = FS(a[i],a);
            i++;
        }
        printf("%s\n",a);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月1日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?