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

如何实现基于三个整数的Musical Chairs循环数值交换游戏

解决Musical Chairs交换游戏的问题

嘿,我来帮你搞定这个问题!先看看你现有代码里的几个关键问题,然后一步步修正:

你的代码里的核心问题

  • 循环缩进错误:你的for循环没有用大括号{}包裹代码块,导致只有a = b;会被循环执行,b = c;只在循环结束后跑一次,完全不符合交换的需求。
  • 交换逻辑不完整:你只处理了a和b的赋值,但没完成c的更新,而且没有提前保存原始值,会导致数据被覆盖丢失。
  • 值类型参数传递问题:C#里int是值类型,直接传参数的话,方法里的修改不会影响外部的变量,得用ref关键字来传递引用。

修正后的完整代码

using System;

class Program
{
    public static void Main()
    {
        Console.WriteLine("请输入a的初始值:");
        int a = int.Parse(Console.ReadLine());
        Console.WriteLine("请输入b的初始值:");
        int b = int.Parse(Console.ReadLine());
        Console.WriteLine("请输入c的初始值:");
        int c = int.Parse(Console.ReadLine());
        Console.WriteLine("请输入循环次数N:");
        int N = int.Parse(Console.ReadLine());

        Console.WriteLine($"N = {N} // 循环次数");
        Console.WriteLine($"a = {a}, b = {b}, c = {c} // 初始值");

        MusicalChairs(N, ref a, ref b, ref c);

        Console.WriteLine($"a = {a}, b = {b}, c = {c} // {N}次循环后的值");
    }

    static void MusicalChairs(int N, ref int a, ref int b, ref int c)
    {
        for (int i = 0; i < N; i++)
        {
            // 保存三个变量的原始值,避免赋值时覆盖需要用到的数据
            int originalA = a;
            int originalB = b;
            int originalC = c;

            // 按照你的示例规则完成交换:a取原c的值,b取原a的值,c取原b的值
            a = originalC;
            b = originalA;
            c = originalB;
        }
    }
}

代码细节解释

  1. ref关键字的作用:用来传递变量的引用,这样方法里对a、b、c的修改会直接同步到外部的变量上,解决值类型传递无法修改外部变量的问题。
  2. 临时变量保存原始值:每次循环前先把三个变量的当前值存起来,再进行赋值操作,确保交换过程中不会丢失需要用到的原始数据。
  3. 完整的循环代码块:用大括号把循环内的所有操作包裹起来,保证每一次循环都能完整执行三次赋值,完成一轮交换。
  4. 友好的交互与输出:增加了输入提示文字,同时输出初始值和最终结果,完全匹配你给出的示例格式。

测试你提供的示例场景:输入a=1、b=2、c=3、N=1,程序会输出:

N = 1 // 循环次数
a = 1, b = 2, c = 3 // 初始值
a = 3, b = 1, c = 2 // 1次循环后的值

完全符合你的预期!

内容的提问来源于stack exchange,提问作者Mohsen Fakhrizadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:27:39