鱼C论坛

 找回密码
 立即注册
查看: 4312|回复: 2

[学习笔记] S22课堂作业(凯撒加密),自己写的,没看鱼哥的答案,发完贴就去看了

[复制链接]
发表于 2017-11-21 16:00:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qq1242009750 于 2017-12-8 15:57 编辑

                                                 步数说明图和算法思想在文章的尾部
template <typename T1>
void ClassWork(T1* &head, int num)
{
        if (head == NULL)
        {
                cout << setw(10) << setfill('*') << "Error!" << endl;
                return;
        }

        T1 *tmp = head;

        num = num % 26;                //计算开始的字符

        if (num < 0)                //判断正负
        {        
                for (int i = 25 - ((-num) + 1); i <= 25; ++i)          //赋值
                {
                        tmp->data = 'A' + i;
                        tmp = tmp->Next;
                }
                
                //赋值前面的字母 因为前面从 num+1 开始赋值的 ,所以 只剩下 0 到 num 没有赋值
                for (int i = 0; i <= 25 - (-num); i++)        
                {
                        tmp->data = 'A' + i;
                        tmp->Next;
                }
        }
        else
        {
                for (int i = num; i <= 25; i++)        //赋值
                {
                        tmp->data = 'A' + i;
                        tmp = tmp->Next;
                }
                if (num != 0)        //判断 num 是否为零 如是则表示 是全部赋值, 不是 则表示从 num 开始赋值
                {
                        //赋值前面的字母 因为前面从num 开始赋值, 所以只剩下 0 到 num-1 没赋值
                        for (int i = 0; i <= num - 1; i++)
                        {
                                tmp->data = 'A' + i;
                                tmp = tmp->Next;
                        }
                }
        }
}


算法思想:
                1.一共有26个元素
                2.字母的下标为 0 到 25
                3.num%=26表示 去除环数,获取移动的步数
                4.如果num为正,例如 3 则表示从第四个元素开始对链表赋值,而'A' + 3 == 'D',所以从'A' + num(因为下标从0开始,而3正好是第4个元素)开始赋值,到了'Z'后,就从'A' + 0 到 'A' + num - 1 赋值到链表
                5.如果num为负,例如 -3 则表示从倒数第3个元素开始赋值 ,因为一开始就指向倒数第一个元素,所以只要走 25 -((-num)+1)次,+1表示 减去1次行走的分量, 所以从'Z' - 2 开始赋值,到了'Z',就从 'A' + 0 到 'A' + 22 赋值
       
步数说明图.png

以上是本人的不才之见,如有错误,请多多指出   谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-29 19:43:42 | 显示全部楼层
棒棒!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-1 21:43:41 | 显示全部楼层
牛啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 18:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表