鱼C论坛

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

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

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

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

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

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

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

  9.         T1 *tmp = head;

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

  11.         if (num < 0)                //判断正负
  12.         {       
  13.                 for (int i = 25 - ((-num) + 1); i <= 25; ++i)          //赋值
  14.                 {
  15.                         tmp->data = 'A' + i;
  16.                         tmp = tmp->Next;
  17.                 }
  18.                
  19.                 //赋值前面的字母 因为前面从 num+1 开始赋值的 ,所以 只剩下 0 到 num 没有赋值
  20.                 for (int i = 0; i <= 25 - (-num); i++)       
  21.                 {
  22.                         tmp->data = 'A' + i;
  23.                         tmp->Next;
  24.                 }
  25.         }
  26.         else
  27.         {
  28.                 for (int i = num; i <= 25; i++)        //赋值
  29.                 {
  30.                         tmp->data = 'A' + i;
  31.                         tmp = tmp->Next;
  32.                 }
  33.                 if (num != 0)        //判断 num 是否为零 如是则表示 是全部赋值, 不是 则表示从 num 开始赋值
  34.                 {
  35.                         //赋值前面的字母 因为前面从num 开始赋值, 所以只剩下 0 到 num-1 没赋值
  36.                         for (int i = 0; i <= num - 1; i++)
  37.                         {
  38.                                 tmp->data = 'A' + i;
  39.                                 tmp = tmp->Next;
  40.                         }
  41.                 }
  42.         }
  43. }
复制代码



算法思想:
                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-4-25 10:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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