AI确实很强大,或许未来已来
随缘用的是国内非知名某chat app(非pro,每天限制几个提问)。
提问一:用C#语言编写一个猜数字的游戏, 每次从整数1到9中猜四个数字,不可重复。 每猜一次数字和顺序都对时,则打印一个“b”;每猜一次数字对但顺序不对则打印一个”w”。
具体它给出的回答如下:
//这是一个简单的猜数字游戏C#代码,要求猜测的数字不重复,每次猜测后,如果有数字和位置都正确,则打印一个 "b";如果有数字正确但是位置不对,则打印一个 "w",直到玩家猜出正确答案才结束游戏。 //```csharp using System; using System.Linq; class Program { static void Main(string[] args) { int[] answer = GenerateAnswer(); int[] guess = new int[4]; bool correct = false; while (!correct) { Console.Write("猜4个不同的数字(1~9),请以空格分隔:"); guess = Console.ReadLine().Split().Select(int.Parse).ToArray(); if (!CheckValidGuess(guess)) { Console.WriteLine("无效的猜测,请重新输入。"); continue; } string result = ""; int b = 0, w = 0; for (int i = 0; i < 4; i++) { if (answer[i] == guess[i]) b++; else if (answer.Contains(guess[i])) w++; } if (b == 4) { correct = true; result = "恭喜你,猜对了!"; } else { result = $"结果是 {b}b {w}w 。"; } Console.WriteLine(result); } Console.ReadKey(); } static int[] GenerateAnswer() { Random rnd = new Random(); int[] arr = new int[4]; for (int i = 0; i < 4; i++) { int num = rnd.Next(1, 10); while (arr.Contains(num)) { num = rnd.Next(1, 10); } arr[i] = num; } return arr; } static bool CheckValidGuess(int[] arr) { if (arr.Length != 4) return false; for (int i = 0; i < 4; i++) { if (arr[i] < 1 || arr[i] > 9) return false; for (int j = i + 1; j < 4; j++) { if (arr[i] == arr[j]) return false; } } return true; } } //``` //这个程序利用 Random 类随机生成答案,然后每次从控制台中读取玩家输入,利用 CheckValidGuess 函数验证输入是否合法, //若不合法则提示错误信息,重新读取输入;若合法,则通过遍历判断输入与答案中数字位置和数字是否相同,并输出结果,最后提示猜对的消息。
运行后结果如下:
本地环境原因,上面?可以跳过,这就一个smash code小游戏。
提问二:用C#语言编写一个猜数字程序,让用户输入一个四位数ABCD,各位数字不重复且不包含0,然后让用户再输入x和y,其中x代表ABCD数字和顺序都对数量,y代表ABCD数字对但顺序不对的数量,逐渐缩小范围,最终得到正确的数字
具体它给出的回答如下:
//以下是用C#语言编写的猜数字程序。程序会要求用户随机输入一个四位数,然后提示用户输入x和y,依据用户提供的信息,程序会逐渐缩小范围,最终猜到正确的数字。 //```c# using System; using System.Collections.Generic; public class Program { public static void Main() { Console.WriteLine("请猜一个四位数,每个数字都不相同且不包含0。"); // 生成所有可行数字列表 List<string> allNumbers = GenerateNumbers(); // 开始猜数字 while (true) { // 随机选择一个数字进行猜测 Random rnd = new Random(); string guess = allNumbers[rnd.Next(allNumbers.Count)]; Console.WriteLine("我猜是:{0}", guess); // 获取用户输入的x和y int x = 0, y = 0; Console.Write("请输入x的值:"); int.TryParse(Console.ReadLine(), out x); Console.Write("请输入y的值:"); int.TryParse(Console.ReadLine(), out y); // 如果猜中了,输出结果并结束程序 if (x == 4) { Console.WriteLine("恭喜!猜中了结果为:{0}", guess); break; } // 移除不符合条件的数字,缩小可行数字范围 List<string> tmpList = new List<string>(); foreach (string s in allNumbers) { if (Match(guess, s).Equals(new Tuple<int, int>(x, y))) //将“==”修改为了“.Equals” { tmpList.Add(s); } } allNumbers = tmpList; // 如果可行数字列表为空,说明猜错了 if (allNumbers.Count == 0) { Console.WriteLine("你猜错了!不可能出现此情况!"); break; } Console.WriteLine("可用数字有{0}个。", allNumbers.Count); } Console.WriteLine("游戏结束。"); } // 生成所有可行的四位数字列表 public static List<string> GenerateNumbers() { List<string> result = new List<string>(); for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) { if (i != j) { for (int k = 1; k <= 9; k++) { if (i != k && j != k) { for (int l = 1; l <= 9; l++) { if (i != l && j != l && k != l) { result.Add(string.Format("{0}{1}{2}{3}", i, j, k, l)); } } } } } } } return result; } // 比较两个四位数字,返回x和y的值 public static Tuple<int, int> Match(string a, string b) { int x = 0, y = 0; for (int i = 0; i < 4; i++) { if (a[i] == b[i]) { x++; } else if (a.Contains(b[i].ToString())) { y++; } } return new Tuple<int, int>(x, y); } } //```
运行后可以解前面的小游戏。
总的看来,生成快速,代码简洁,基本不需要改动,关键是他能很好地理解人类的语言,真的是很强大,至少比我之前想象的要强多了!