【代码最简化】打印一个“回”字图形,看谁写的代码最少。
private void PrintBox(){ // TODO : 自由发挥}private void button1_Click(object sender, EventArgs e){ PrintBox(); }
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; } }}
[解决办法]
先顶下
学习
[解决办法]
潜力贴,MARK
[解决办法]
不知道楼主想干什么
[解决办法]
收藏先
[解决办法]
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("---------------------------------"); } } }
[解决办法]
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; }}
[解决办法]
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(); }
[解决办法]
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 ("----------------------------------------"); } }}
[解决办法]
略微化减一点点
private void PrintBox(){ for (int k = 1; k <= 9; k++) { for (int i = 1; i < k * 2; i++) { for (int j = 1; j < k * 2; j++) { Console.Write(Convert.ToString(Math.Abs(k - ((Math.Abs(k - i) >= Math.Abs(k - j)) ? i : j)) + 1)); } Console.WriteLine(); } Console.WriteLine("-------"); }}private void button1_Click(object sender, EventArgs e){ PrintBox(); }
[解决办法]
private void PrintBox() { for (int i = 1; i <= 9; i++) { int[,] array = new int[i * 2 - 1, i * 2 - 1]; array[i - 1, i - 1] = 1; for (int j = 0; j < i * 2 - 1; j++) for (int k = 0; k < i * 2 - 1; k++) { array[j, k] = Math.Max(Math.Abs(j - i + 1), Math.Abs(k - i + 1)) + 1; if (k != i * 2 - 2) Console.Write(array[j, k]); else Console.WriteLine(array[j, k]); } Console.WriteLine("----------"); } }
[解决办法]
受wdgphc启发,再改改
private void PrintBox(){ for (int i = 1; i <= 9; i++) for (int j = 0; j < i * 2 - 1; j++) for (int k = 0; k < i * 2 - 1; k++) Console.Write(Math.Max(Math.Abs(j - i + 1), Math.Abs(k - i + 1)) + 1 + (k == i * 2 - 2 ? j == i * 2 - 2 ? "\n------\n" : "\n" : ""));}
[解决办法]
print "回"
[解决办法]
mark
[解决办法]
static void PrintBox() { // TODO : 自由发挥 Console.WriteLine(@"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 "); }
[解决办法]
猛人不少嘛
[解决办法]
寒37楼
[解决办法]
先发一贴:
static void printbox(int num){ for (int i = 0; i < num * 2 - 1; i++) { for (int j = 0; j < num * 2 - 1; j++) { Console.Write(Math.Max(Math.Abs(i - num + 1), Math.Abs(j - num + 1)) + 1); } Console.WriteLine(); }}
[解决办法]
发完贴后,才知道有很多人跟我的算法一样,那就再来一贴试试
static void printbox(){ for (int num = 1; num < 10; num++) { int n = num * 2 - 1; for (int i = 0; i < n * n; ) { Console.Write((Math.Max(Math.Abs(i % n - num + 1), Math.Abs(i / n - num + 1)) + 1) + (++i % n == 0 ? "\n" : "")); } Console.Write("-------\n"); }}
[解决办法]
static void printbox(){ for (int x = 1; x < 10; x++) { int n = x * 2 - 1; for (int i = 0; i < n * n; ) Console.Write((Math.Max(Math.Abs(i % n - x + 1), Math.Abs(i / n - x + 1)) + 1) + (++i % n == 0 ? "\n" : "")); Console.Write("-------\n"); }}
[解决办法]
看贴不回好像然被人BS,所以路过回一下.
看来最简化的公式看来只有以下两个了.
1. Math.Max(Math.Abs(i - num + 1), Math.Abs(j - num + 1)) + 1
2. (Math.Max(Math.Abs(i % n - x + 1), Math.Abs(i / n - x + 1)) + 1) + (++i % n == 0 ? "\n" : "")
[解决办法]
放在Web工程里调试的,所以多加了一个重载。
void PrintBox() { PrintBox(Console.Out); } void PrintBox(TextWriter writer) { StringBuilder line; string[] lines; for (int num = 1; num <= 9; num++) { lines = new string[num * 2 - 1]; line = new StringBuilder(new string(' ', num * 2 - 1)); for (int l = num; l > 0; l--) { for (int c = num; c > 0; c--) line[num - c] = line[num + c - 2] = (char)((l > c ? l : c) + 48); lines[num - l] = lines[num + l - 2] = line.ToString(); } writer.WriteLine(string.Join("\n", lines)); writer.WriteLine(new string('-', 8)); } }
[解决办法]
虽然很长,但觉得还算逻辑比较简单
const int Number = 5;static void Print(string[] args){ int rank = GetRank(Number); int[,] matrix = new int[rank, rank]; for (int i = Number; i > 0; i--) { SetMatric(matrix, rank, i); } PrintResult(rank, matrix);}private static int GetRank(int n){ return n * 2 - 1;}private static void SetMatric(int[,] matrix, int rank, int n){ int row1 = Number - n; int row2 = rank - (Number - n) - 1; int colOffice = Number - n; int count = GetRank(n); for (int i = 0; i < count; i++) { matrix[row1, colOffice + i] = n; // 上面行 matrix[row2, colOffice + i] = n;// 下面行 if (i < count - 2) { matrix[row1 + i + 1, colOffice] = n;// 左列 matrix[row1 + i + 1, rank - colOffice - 1] = n;// 右列 } }}private static void PrintResult(int rank, int[,] matrix){ for (int i = 0; i < rank; i++) { for (int j = 0; j < rank; j++) { Console.Write(matrix[i, j]); } Console.Write(Environment.NewLine); }}
[解决办法]
//这是完整的代码
using System;
class MyClass
{
public static int[,] output(int n)
{
int[,] final = new int[n * 2 - 1,n * 2 - 1];
for (int i = n; i >= 1; i--)
{
for (int y = 0; y < i * 2 - 1; y++)
{
for (int x = 0; x < i * 2 - 1; x++)
{
final[x + n - i, y + n - i] = i;
}
}
}//核心代码只有这么多,下面是打印
for (int y = 0; y < n * 2 - 1; y++)
{
for (int x = 0; x < n * 2 - 1; x++)
{
Console.Write(final[x,y]);
}
Console.Write("\n");
}
}
static void Main()
{
output(10);
}
}
[解决办法]
递归做,超过10就难看了
class Program
{
static void Main(string[] args)
{
test();
Console.ReadKey();
}
static void test()
{
for (int i = 1; i < 10; i++) {
int[,] result = new int[i * 2 - 1, i * 2 - 1];
print(result, i * 2 - 1, 0, 0, i);
test1(result, i);
Console.WriteLine("===============================");
}
}
static void print(int[,] r,int rank,int row,int column,int ran)
{
if (rank == 1) {
r.SetValue(1, row, column);
return;
}
for (int i = row; i < rank; i++)
{
for (int j = column; j < rank; j++)
{
if (i == row || j == column || i == rank - 1 || j == rank - 1) r.SetValue(ran, i, j);
}
}
print(r, rank - 1, row + 1, column + 1, ran - 1);
}
static void test1(int[,] t, int rank) {
for (int i = 0; i < rank*2-1; i++)
{
for (int j = 0; j < rank * 2 - 1; j++)
{
Console.Write(t.GetValue(i,j));
}
Console.WriteLine();
}
}
}
[解决办法]
不会 .net 用 Java 写了个来凑热闹,呵呵
public class Test01 { public static void main(String[] args) { for(int n = 1; n < 10; n++) { for (int i = 0 - (n - 1); i < n; i++) { for (int j = 0 - (n - 1); j < n; j++) { System.out.print(Math.abs(i) >= Math.abs(j) ? Math.abs(i) + 1 : Math.abs(j) + 1); } System.out.println(); } System.out.println("-------"); } }}
[解决办法]
用对角线可以将整个回字形化成4个部分,一样的结构,只是位置不一样而已
发下我的代码
public void Print(int iCount) { int iRow = 2 * iCount - 1; int[,] array = new int[iRow, iRow]; for (int i = 0; i <iCount ; i++) { for (int j = i; j < iRow - i; j++) { // 数据填充部分 array[i, j] = iCount - i; array[iRow - 1 - i, j] = iCount - i; array[j, i] = iCount - i; array[j, iRow - 1 - i] = iCount - i; } } for (int i = 0; i < iRow; i++) { for (int j = 0; j < iRow; j++) { Console.Write(array[i, j].ToString() + " "); } Console.WriteLine(); } }
[解决办法]
递归,不过太长了,而且字符串拼接次数太多。。。
private void PrintBox() { for (int i = 1; i < 10; i++) { foreach (var item in PrintBoxCore(i)) { Console.WriteLine(item); } Console.WriteLine("-----"); } } private IEnumerable<string> PrintBoxCore(int i) { string s = i.ToString(); if (i == 1) { yield return s; } else { yield return new string(s[0], i * 2 - 1); foreach (var item in PrintBoxCore(i - 1)) { yield return s + item + s; } yield return new string(s[0], i * 2 - 1); } }
[解决办法]
#define T 8#define N T*2+1 int M=N; int arr[N][N]={0}; while(M>0) { for(int i=N-M;i<M;i++) { for(int j=N-M;j<M;j++) { arr[i][j]=M-T; } } M--; } for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { printf("%d ",arr[i][j]); } printf("\n"); }
[解决办法]
先贴 自己的破代码。。。逻辑比较简单 =.= 比较土...
在学习在ls的各位算法....
#include<iostream>using namespace std;void PrintBox(int n){ for(int i = 1; i <= 2 * (n - 1) + 1; i++) { int m = i > n ? 2 * n - i:i; int j = n - m + 1; for(int k = n; k > j; k--) cout<<k;//每行的递减部分 for(int k = 1; k <= 2 * (j - 1) + 1; k++) cout<<j;//每行的相等部分,输出每个数的第一行 都为2 * (j - 1) + 1次 for(int k = j + 1; k <= n; k++) cout<<k;//每行的递增部分 cout<<endl; }}int main(){ for(int i = 1; i < 10; i++) { PrintBox(i); cout<<endl; cout<<"----------------------------------"; cout<<endl; } return 0;}
[解决办法]
a(i,j)=max(|n-i|,|n-j|)+1;
static void PrintBox(int m) { for (int n=1;n<=m;n++) { int p=2*n-1; for (int i=1;i<=p;i++) for (int j=1;j<=p;j++) Console.Write(Math.Max(Math.Abs(n-i),Math.Abs(n-j))+1); Console.Write("\n"); Console.Write("-------\n"); } }
[解决办法]
static void PrintBox(int m)
{
for (int n=1;n<=m;n++)
{
int p=2*n-1;
for (int i=1;i<=p;i++)
{
for (int j=1;j<=p;j++)
Console.Write(Math.Max(Math.Abs(n-i),Math.Abs(n-j))+1);
Console.Write("\n");
}
Console.Write("-------\n");
}
}