qq1242009750 发表于 2017-11-21 16:00:09

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

本帖最后由 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 赋值
       


以上是本人的不才之见,如有错误,请多多指出   谢谢。{:5_92:}

苏安酸 发表于 2020-9-29 19:43:42

棒棒!

zxiii 发表于 2022-11-1 21:43:41

牛啊
页: [1]
查看完整版本: S22课堂作业(凯撒加密),自己写的,没看鱼哥的答案,发完贴就去看了