PTA02-1第一次版本C#

这篇博客展示了如何使用C#处理链表数据结构,通过读取文件或输入数据,创建链表节点,并根据指定长度进行反转操作。代码中定义了Node类并实现了主程序中的链表反转逻辑。
<ol><li><span style="font-family: Arial, Helvetica, sans-serif;">using System;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">using System.Collections.Generic;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">using System.Linq;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">using System.Text;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">using System.Threading.Tasks;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">using System.IO;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">namespace MyReverLinkedList</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">{</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">    class Program</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">    {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        static void Main(string[] args)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            List<Node<string, string>> list = new List<Node<string, string>>();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            List<Node<string, string>> listAddress = new List<Node<string, string>>();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            string input = acceptmultiLineChars2();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            string[] inputs = input.Replace("\r\n\r", "\r").Replace("\r\n\n", "").Split('\r');</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            //string input = File.ReadAllText("1.txt");</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            //string[] inputs = input.Replace("\r\n", "\r").Split('\r');</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            int x = inputs.Count();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            string[] aa =inputs[0].Split(' ');</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            string headAddress = aa[0];</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            int reverseLength = int.Parse(aa[2]);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            string[,] inputLinesValue = new string[x, 3];</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            for (int i = 1; i < x; i++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                string[] inputLines = inputs[i].Split(' ');</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                int y = inputLines.Count();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                for (int m = 0; m < y; m++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">			    {  </span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                    inputLinesValue[i,m] = inputLines[m];</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">			    }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                Node<string, string> n = new Node<string, string>(inputLinesValue[i,1],inputLinesValue[i,0],inputLinesValue[i,2]);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                list.Add(n);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            do</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                foreach (Node<string, string> item in list)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                    if (item.CurrentAddress == headAddress)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                    {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                        listAddress.Add(item);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                        headAddress = item.NextAddress;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                    }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            } while (listAddress.Count() < list.Count());</span></li><li>
</li><li><span style="font-family: Arial, Helvetica, sans-serif;">            //ReverList(listAddress, reverseLength);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            foreach (var item in listAddress)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                Console.WriteLine(item.CurrentAddress + " " + item.Data + " " + item.NextAddress);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">           //Console.Read();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li>
</li><li><span style="font-family: Arial, Helvetica, sans-serif;">        private static void ReverList(List<Node<string, string>> listAddress, int reverseLength)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            int laCount = listAddress.Count();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            int revCount = laCount / reverseLength;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            for (int revLen = 0; revLen < revCount; revLen++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                listAddress.Reverse(revLen * revCount, reverseLength);</span></li><li>
</li><li><span style="font-family: Arial, Helvetica, sans-serif;">            }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            for (int i = 0; i < laCount; i++)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                int lastIndex = -1;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                string lastNextAddress = lastIndex.ToString();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                listAddress[laCount - 1].NextAddress = lastNextAddress;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                if (listAddress[i].NextAddress != lastNextAddress)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                    listAddress[i].NextAddress = listAddress[i + 1].CurrentAddress;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        static string acceptmultiLineChars2()</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            ConsoleKeyInfo cki;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            //Console.TreatControlCAsInput = true;//防止Ctrl+C复制</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            Console.WriteLine("Press the CTRL+Enter key to quit: \n");</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            string result = string.Empty;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            do</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                cki = Console.ReadKey();</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                if (cki.Key == ConsoleKey.Enter)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                    result += System.Environment.NewLine;//如果输入回车,则加入换行标志</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                    Console.SetCursorPosition(0, Console.CursorTop + 1);//光标下移一行</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">                result += cki.KeyChar;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            } while (cki.Key != ConsoleKey.Enter || (cki.Modifiers & ConsoleModifiers.Control) == 0);//按Ctrl+Enter退出</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            return result;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">    }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">    class Node<T, K></span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">    {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        K currentAddrss;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        K nextAddress;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        T data;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        Node<T, K> next;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        public Node()</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            currentAddrss = default(K);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            nextAddress = default(K);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            data = default(T);</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            next = null;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        public Node(T value, K currentAddress, K nextAddress)</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            this.data = value;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            this.currentAddrss = currentAddress;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            this.nextAddress = nextAddress;</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        public T Data</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            get { return data; }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            set { data = value; }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        public K CurrentAddress</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            get { return currentAddrss; }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            set { currentAddrss = value; }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        public K NextAddress</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        {</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            get { return nextAddress; }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">            set { nextAddress = value; }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">        }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">    }</span></li><li><span style="font-family: Arial, Helvetica, sans-serif;">}</span></li></ol>
### PTA L1-084 题目分析 目前未找到关于PTA L1-084的具体题目描述或解法的相关信息。然而,可以推测该类题目通常涉及算法设计、数据结构应用以及编程实现等内容。基于已知的其他PTA题目模式[^1],这类题目可能要求解决某种特定逻辑问题,例如字符串处理、数组操作或者模拟游戏规则。 以下是针对此类题目的通用解答框架: #### 可能的题目类型与解决方案 如果假设L1-084属于简单的输入输出或逻辑判断类别,则其解法可参考如下模板。以下是一个典型的输入输出问题示例代码(以C++为例): ```cpp #include <iostream> #include <vector> using namespace std; int main() { int K; string input, move; vector<string> result; // 存储结果 cin >> K; // 平局间隔次数 while (cin >> move && move != "End") { // 循环读取直到遇到"End" if (!result.empty() && result.size() % (K + 1) == 0) { // 如果当前轮到平局 if (move == "ChuiZi") result.push_back("ChuiZi"); else if (move == "JianDao") result.push_back("JianDao"); else if (move == "Bu") result.push_back("Bu"); } else { // 否则计算稳赢策略 if (move == "ChuiZi") result.push_back("Bu"); else if (move == "JianDao") result.push_back("ChuiZi"); else if (move == "Bu") result.push_back("JianDao"); } } for(auto &res : result){ cout << res << endl; } return 0; } ``` 上述代码展示了如何通过条件分支来决定每次输出的内容,并考虑了平局的情况。 #### 关于沙漏打印问题扩展思考 虽然此问题并非直接关联L1-084,但从引用[2]可以看出,某些PTA题目会考察二维图形构建能力。例如,对于给定数量字符形成沙漏图案的任务,需注意层数分配及中心对齐等问题[^2]。这提示我们,在面对未知编号题目时,可以从常见考点出发进行推导。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值