首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 【代码最简化】打印一个“回”字图形,看谁写的代码最少。 [已结帖,结帖人:zswang]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    • 2

      7

    发表于:2008-08-24 19:04:49 楼主
    需求按顺序输出从1到9个环的“回”字图形,参见输出。这个输出是固定不变的,就看谁用最少的代码实现。

    注:系统标识符和自定义标识符都只计为一个字符。即:“int”和“System.Int32”都只算一个字符。
    可以引用任何一个.NET自带的程序库,但不允许使用第三方控件和程序库。建议使用VS2005和VS2008环境。

    输出1
    -------
    222
    212
    222
    -------
    33333
    32223
    32123
    32223
    33333
    -------
    4444444
    4333334
    4322234
    4321234
    4322234
    4333334
    4444444
    -------
    555555555
    544444445
    543333345
    543222345
    543212345
    543222345
    543333345
    544444445
    555555555
    -------
    66666666666
    65555555556
    65444444456
    65433333456
    65432223456
    65432123456
    65432223456
    65433333456
    65444444456
    65555555556
    66666666666
    -------
    7777777777777
    7666666666667
    7655555555567
    7654444444567
    7654333334567
    7654322234567
    7654321234567
    7654322234567
    7654333334567
    7654444444567
    7655555555567
    7666666666667
    7777777777777
    -------
    888888888888888
    877777777777778
    876666666666678
    876555555555678
    876544444445678
    876543333345678
    876543222345678
    876543212345678
    876543222345678
    876543333345678
    876544444445678
    876555555555678
    876666666666678
    877777777777778
    888888888888888
    -------
    99999999999999999
    98888888888888889
    98777777777777789
    98766666666666789
    98765555555556789
    98765444444456789
    98765433333456789
    98765432223456789
    98765432123456789
    98765432223456789
    98765433333456789
    98765444444456789
    98765555555556789
    98766666666666789
    98777777777777789
    98888888888888889
    99999999999999999
    -------


    调试代码:
    C# code
    private void PrintBox() { // TODO : 自由发挥 } private void button1_Click(object sender, EventArgs e) { PrintBox(); }
    400  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      7

    发表于:2008-08-24 19:05:291楼 得分:0
    使用代码最少的,奖励100分,其他按情况散掉。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kyle315
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 19:20:502楼 得分:1
    先把数字放入数组然后打印数组。
    只说说想法吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • LQknife
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 19:23:453楼 得分:1
    潜力贴先留名
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sp1234
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 19:37:174楼 得分:3
    其实应该比逻辑,而不是比谁的代码少。

    C# code
    class Program { static Dictionary<string, int> buff; static void Main(string[] args) { do { Console.Write("输入一个整数..."); int x = int.Parse(Console.ReadLine()); buff = new Dictionary<string, int>(); int y = think(x, 1); print(y); } while (true); } static void print(int 行数) { for (int i = 1; i <= 行数; i++) { for (int h = 1; h <= 行数; h++) Console.Write(buff[i.ToString() + "," + h.ToString()]); Console.WriteLine(); } } static int think(int x, int 开始行) { if (x == 1) { buff.Add(开始行.ToString() + "," + 开始行.ToString(), 1); return 开始行; } else { int e = think(x - 1, 开始行 + 1); for (int i = 开始行; i <= e + 1; i++) { buff.Add(开始行.ToString() + "," + i.ToString(), x); buff.Add((e + 1).ToString() + "," + i.ToString(), x); } for (int i = 开始行 + 1; i <= e; i++) { buff.Add(i.ToString() + "," + 开始行.ToString(), x); buff.Add(i.ToString() + "," + (e + 1).ToString(), x); } return e + 1; } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ling3wei
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 19:39:125楼 得分:1
    先顶下
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zbking
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 19:49:306楼 得分:1
    潜力贴,MARK
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      7

    发表于:2008-08-24 19:50:367楼 得分:0
    引用 4 楼 sp1234 的回复:
    其实应该比逻辑,而不是比谁的代码少。

    1、我的需求就是比谁写的代码少,这样比的是创意和想象力;
    2、你的代码期望填写在PrintBox()方法中。
    感谢参与。

    C# code
    private void PrintBox() { // TODO : 自由发挥《《《《我期望大家在这里添加代码,输出1-9的图像。 } private void button1_Click(object sender, EventArgs e) { PrintBox(); }


    就是说图形是固定的,不需要用户在输入什么。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hflkl1314
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 19:55:578楼 得分:1
    不知道楼主想干什么
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      7

    发表于:2008-08-24 19:56:159楼 得分:0
    4楼的代码输出结果是正确的,整理成这样,方便比较多少。
    C# code
    static Dictionary<string, int> buff; static void print(int 行数) { for (int i = 1; i <= 行数; i++) { for (int h = 1; h <= 行数; h++) Console.Write(buff[i.ToString() + "," + h.ToString()]); Console.WriteLine(); } Console.WriteLine("-------"); } static int think(int x, int 开始行) { if (x == 1) { buff.Add(开始行.ToString() + "," + 开始行.ToString(), 1); return 开始行; } else { int e = think(x - 1, 开始行 + 1); for (int i = 开始行; i <= e + 1; i++) { buff.Add(开始行.ToString() + "," + i.ToString(), x); buff.Add((e + 1).ToString() + "," + i.ToString(), x); } for (int i = 开始行 + 1; i <= e; i++) { buff.Add(i.ToString() + "," + 开始行.ToString(), x); buff.Add(i.ToString() + "," + (e + 1).ToString(), x); } return e + 1; } } private void PrintBox_sp1234_4楼() { for (int x = 1; x <= 9; x++) { buff = new Dictionary<string, int>(); int y = think(x, 1); print(y); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      7

    发表于:2008-08-24 19:57:2310楼 得分:0
    引用 8 楼 hflkl1314 的回复:
    不知道楼主想干什么
    就是让大家发挥一下想象力,娱乐一下。图
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sp1234
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 20:02:3111楼 得分:0
    引用 7 楼 zswang 的回复:
    引用 4 楼 sp1234 的回复:
    其实应该比逻辑,而不是比谁的代码少。

    1、我的需求就是比谁写的代码少,这样比的是创意和想象力;
    2、你的代码期望填写在PrintBox()方法中。
    感谢参与。




    例如我不会去考虑是否应该立刻把“e+1”保存在一个变量里来“减少代码”的问题,我觉得写出来就行了,没必要再去对那类非设计逻辑问题优化了。所以,我觉得措辞是“比谁写的逻辑最简练”更好,而不是“比谁写的代码少”。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • amandag
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

    发表于:2008-08-24 21:26:0412楼 得分:1
    收藏先
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • whycom
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 21:26:1513楼 得分:3
    C# code
    class Program { static void Main(string[] args) { print(); Console.Read(); } private static void print() { for( int i=0 ; i<9;i++) { for (int j = 0; j < 2 * i + 1; j++) { for (int k = 0; k < 2 * i + 1; k++ ) { int tempj, tempk; if (j < i) tempj = i - j ; else tempj = j - i; if (k < i) tempk = i - k ; else tempk = k - i; Console.Write(tempj > tempk ? tempj+1 : tempk+1); Console.Write(" "); } Console.Write("\r\n"); } Console.WriteLine("---------------------------------"); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nattystyle
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 21:45:1114楼 得分:3
    C# code
    class Program { static void Main(string[] args) { PrintBox(9); } static void PrintBox(int n) { int[,] a = CreatArray(n); for (int i = 0; i < 2 * n - 1; i++) { for (int j = 0; j < 2 * n - 1; j++) { Console.Write(a[i,j]); } Console.WriteLine(); } } static int[,] CreatArray(int n) { int d = 2 * n - 1; int[,] a = new int[d, d]; if (n == 1) { a[0, 0] = 1; return a; } int[,] t = CreatArray(n - 1); for(int i = 0;i < d;i++) for (int j = 0; j < d; j++) { if (i > 0 && i < d - 1 && j > 0 && j < d - 1) a[i, j] = t[i-1, j-1]; else a[i, j] = n; } return a; } }


    递归 n_n
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wdgphc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 22:43:1815楼 得分:3
    C# code
    private void PrintBox() { // TODO : 自由发挥 for (int k = 1; k <= 9; k++) { for (int i = 0; i <= 2 * k - 2; i++) { for (int j = 0; j <= k * 2 - 2; j++) { Console.Write(Convert.ToString(Math.Abs(k - 1 - ((Math.Abs(k - i - 1) >= Math.Abs(k - j - 1)) ? i : j)) + 1)); } Console.WriteLine(); } Console.WriteLine("-------"); } } private void button1_Click(object sender, EventArgs e) { PrintBox(); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChrisAK
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 22:44:4716楼 得分:3
    C# code
    using System; using System.Text; using System.Windows.Forms; using System.Collections.Generic; class Hui { static void printbox(int n) { int cntLine = 2*n-1; int halfLine = cntLine/2; Func<int,string> getLine =(cl)=> { var strLeft = new StringBuilder(); var strRight = new StringBuilder(); int ccolum = -1; for (int i =0;i<halfLine;++i) { int curNum = n-(ccolum==cl?ccolum:++ccolum); strLeft.Append(curNum); strRight.Insert (0,curNum); } strLeft.AppendFormat ("{0}{1}",n - cl,strRight); return strLeft.ToString(); }; for (int i = 0;i<cntLine;++i) { Console.WriteLine (getLine(i>halfLine?cntLine-i-1:i)); } } static void Main () { for (int i=1;i<10;++i) { printbox (i); Console.WriteLine ("----------------------------------------"); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天