码友都知道,遇到复杂的问题,要很多行代码、要if语句或?:运算符等条件句,也可能要创建数组来存储临时运算,为了简化算法,也可能要用到递归等算法。然而,看到头都麻的下题,我的导师竟然不用条件句、不用递归、也不用数组等,就那么几行代码就实现,如果说,我之前提的那两个问题的不用条件句可以理解,为何本题也不用条件句,我怎么都想不能,究竟是如何实现的呢?什么原理呢?有神牛知道的可否告诉我?
要求如下图:
我导师的给出的代码
static int ggg(int A1) { return ((1 - A1 - Math.Abs(A1)) + Math.Abs((1 - A1 - Math.Abs(A1))) - 2) / -2; }
static int hhh(int u,int n) { return Convert.ToInt32((u * 6 + 3 - n * 9) / 2.0 * n); }
static void twine(int u)
{
for (int i = 0; i < u; i++)
{
int x1 =u- i;
int x2 = i*2-u+1 ;
int ei = hhh(u,(u-1-i));
for (int j = 0; j <= i; j++)
{
int y1 = j * 2 + 1;
int y2 = u-1- j;
int g1 = ggg(i + 1 - y1) * ggg(y2 + 1 - i);
int g2= ggg(j + 1 - x1) * ggg(x2 + 1 - j);
int n = g1 * (hhh(u,j) + (y2 - y1 + 1) * 2 + (y2 - i));
n += g2 *( ei + (x2 - x1 + 1) + (x2 - j))+(1 - g1 - g2) * (hhh(u, (i - j)) + i - (i - j) * 2);
Console.Write("{0,4}", n+1);
}
Console.WriteLine();
}
}
那么多种分支情况,为什么没有条件句?
这是找规律问题
这是之前两个提问,我导师也同样没用条件句、没有用数组、没有用集合,并且主体代码没超过5行,不过现在我明白了
我是我导师提供代码的运行结果
各位码友,谁最先给出正确原理解释,就采纳谁的答案,加油哦!
还有这种操作? 我都写过
不是没有条件语句啊,abs本质就是一个条件语句
有码友说,abs本质上是条件句,行吧,我放没有abs,没有if,没有 ?:,没有用数组的代码出来
阁下意下如何?
static int aaa(int n) { return (int)Math.Sqrt(n*n); }
static int ggg(int n) { return ((1 - n - aaa(n)) + aaa((1 - n - aaa(n))) - 2) / -2; }
static int hhh(int u,int n) { return Convert.ToInt32((u * 6 + 3 - n * 9) / 2.0 * n); }
static void twine(int u)
{
for (int i = 0; i < u; i++)
{
int x1 =u- i;
int x2 = i*2-u+1 ;
int ei = hhh(u,(u-1-i));
for (int j = 0; j <= i; j++)
{
int y1 = j * 2 + 1;
int y2 = u-1- j;
int g1 = ggg(i + 1 - y1) * ggg(y2 + 1 - i);
int g2= ggg(j + 1 - x1) * ggg(x2 + 1 - j);
int n = g1 * (hhh(u,j) + (y2 - y1 + 1) * 2 + (y2 - i));
n += g2 *( ei + (x2 - x1 + 1) + (x2 - j))+(1 - g1 - g2) * (hhh(u, (i - j)) + i - (i - j) * 2);
Console.Write("{0,4}", n+1);
}
Console.WriteLine();
}
}
你不觉得 sqrt(n*n) 这样的东西写着很丑吗?
我的导师竟然不用条件句、不用递归、也不用数组等,就那么几行代码就实现
来来来,就那么几行。
好强!!你的导师好强!
他是天地万物之灵秀!他是历史缺失的拼图!他是文明遗漏的珍宝!他是限量款!他是绝版独苗!他是天之骄子!他是最后的晚餐!他是电!!!他是光!!!