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 函数验证输入是否合法,
//若不合法则提示错误信息,重新读取输入;若合法,则通过遍历判断输入与答案中数字位置和数字是否相同,并输出结果,最后提示猜对的消息。
View Code
运行后结果如下:

本地环境原因,上面?可以跳过,这就一个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);
    }
}
//```
View Code

 运行后可以解前面的小游戏。

 

总的看来,生成快速,代码简洁,基本不需要改动,关键是他能很好地理解人类的语言,真的是很强大,至少比我之前想象的要强多了!

 

 
 






 

posted @ 2023-04-02 21:50  atkfc  阅读(105)  评论(0编辑  收藏  举报