回 帖 发 新 帖 刷新版面

主题:一个C#的简单题目.

给出一个不大于1 000 000的数a。每次操作,你可以将当前的数中的两个非零位交换位置,并都减去1,得到一个新的数。比如155,我们将百位和个位进行操作,就得到了450.请你的程序输出经过任意次上述的操作,a最大能变成什么数。最好运行的速度不超过1秒。


    题目不是很难,因为是初学者,想请教下高手如何来写这个程序,谢谢!!

回复列表 (共13个回复)

11 楼

我的看法:
     1:如果这个数原来是89,那干脆不要换,一换准赔,等于87。
         ===>如果高位数字仅比要换的低位数字小1,那么不要换,因为会赔本
     2:如果这个数原来是188,那么用1换个位的8比换十位的8赚得多。
         ===>如果两个处于不同位的数字一样大,那么优先换掉低位的
     3:数字大的数肯定要往前跑,往个位跑准赔。要是前边没有合适的地方那肯定不会有数字和它交换位置。
     基于以上几点,我的思路如下:
     1:先把这个数放到数组中因为数不超过6位,那么我们准备一个int num[6]来存放。num[0]是最高位,num[5]是最低位即个位。没有的数位用0来填充。如100就是000100。
     2:从最高位开始扫描这个数组,找到最大的那个数字,记录下它的下标。如果最大的数存在好几个,那么记录下标大的那一个。找到的下标记作int i。
     3:设int x=num[i]-1,然后从下标0开始搜索,到下标i-1结束。如果被访问的元素比x小而且不是0,那就交换,并且将和x交换的那个数字-1。如果没有合适位置,那么就不动。
     4:此时,最高位肯定已经找到了最合适的数字。将次高位设成当前的最高位,重复过程2-4,直到当前最高位是个位时结束程序。
     5:此时得到的就是最大的数字。

12 楼

我觉得用字符串操作比较好点,它可以直接调用函数,哪个交换,只要那样比较容易,然后再转换一下,就好了,只是我的大概想法

13 楼

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入一个整数:");
            int intNumber =Convert.ToInt32(Console.ReadLine());
            string strTemp = intNumber.ToString();
            Console.WriteLine("请输入你要将哪位交换(输入的整数>=0):");
            int i = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请次输入你要交换的另一位(输入的整数>=0):");
            int j = Convert.ToInt32(Console.ReadLine());
            char ch0,ch1;
            ch0 = strTemp[strTemp.Length - i-1];
            ch1 = strTemp[strTemp.Length - j-1];
            string str = "";
            for (int k = 0; k < strTemp.Length; k++)
            {
                if (i == (strTemp.Length - k-1))
                {
                    str += ch1;
                    continue;
                }
                else if (j == (strTemp.Length - k-1))
                {
                    str += ch0;
                    continue;
                }
                else
                {
                    str += strTemp[k];
                }
            }
            intNumber = Convert.ToInt32(str) - 1;
            Console.WriteLine("操作后的结果为:{0}", intNumber);
            Console.ReadKey();
        }
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册