You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中实现维吉尼亚密码表的字母循环功能?

解决维吉尼亚密码表的字母循环问题

你的代码目前存在两个核心问题:一是每行输出的字符数随循环递减(k从26降到1),但标准维吉尼亚表的每一行都必须包含26个字母;二是无法在输出Z后循环回到A,因为Enumerable.Range(i, k)会直接按ASCII值递增,超出Z后会输出非字母字符。

要实现字母循环效果,我们可以通过模运算来计算每个位置的字符:对于以字符i开头的行,第pos个位置的字符可通过(i - 'A' + pos) % 26 + 'A'推导得出,逻辑如下:

  1. i - 'A'将起始字母转换为0-25的偏移量(A=0,B=1,……,Z=25)
  2. 加上当前位置pos(0到25)得到总偏移量
  3. 对26取模,实现超出Z后从A开始循环
  4. 加上'A'转换回对应的ASCII字母

修正后的完整代码如下:

using System;
using System.Linq;
class VigenereTable
{
    public static void Main(string[] args)
    {
        for (char i = 'A'; i <= 'Z'; i++)
        {
            Enumerable.Range(0, 26)
                      .Select(pos => (char)((i - 'A' + pos) % 26 + 'A'))
                      .ToList()
                      .ForEach(c => Console.Write(c));
            Console.WriteLine();
        }       
    }
}

这段代码会输出标准的维吉尼亚密码表:每行从起始字母依次递增,遇到Z后自动回到A,且每行始终保持26个字符的长度。

内容的提问来源于stack exchange,提问作者Aryaman Shrestha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:40:47