ACFJO
BEIN
DHM
GL
K
题目是用代码在console输出以下字母排列,看起来好像有规律,但脑壳想破都没想出来,看谁会的给个答案,java、c#、c、vb都行
供参考:
#include<stdio.h>
void foo(unsigned n)
{
for(unsigned r=0,c=0;r!=n;r+c+1==n?(++r,c=0):++c)
printf("%c%c",((r+c+1)*(r+c)/2+c+'A'),(r+c+1==n)?'\n':' ');
}
int main()
{
unsigned n;
scanf("%u",&n);
foo(n);
return 0;
}
我导师给的答案:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
for (int i = 1; i < 6; i++)
{
for (int j = 1; j <= 6 - i; j++)
{
Console.Write(((char)('A' + (i + j - 1) * (i + j - 2) / 2 + j - 1)));
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
主体代码4行,运行结果:
我感觉我导师给的答案与qzjhjxj大师的答案原理是一样的,不同的地方是,一个是c#代码,一个是c代码,另一个不同的地方是,我导师给的以内外for循环,而上面大师是单循环控制变量进行行列换算,但结果应该都是一样的,我没进行验证。
至于什么原理,我导师说用的是几何原理,究竟是什么几何原理?是三角形原理还是平行四边形原理或者其它原理,我就不知道了,反正我觉得很历害!
规律就是下一行输出是上一行第二个字符开始遍历,遍历到的字符ASCII-1对应的字符,帮助到你能点个采纳吗,谢谢~~
A【B】C【E】F【I】J【N】O
B【D】E【H】I【M】N
D【G】H【L】M
G【K】H
K
改成可以传测试用例的了,不需要人工输入
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
if (args.Length > 0)
{
var s = args[0];
Console.WriteLine(s);
while (s.Length > 1)
{
var t = "";
for (var i = 1; i < s.Length; i++)
{
t += (char)((int)s[i] - 1);
}
Console.WriteLine(t);
s = t;
}
}
}
}
}
难道要凭空就输出吗。。。总得有一个是定义好的吧
不能解答的码友也可以留言关注,也许有高手会给出答案,我们共同学习。
不过我感觉,好像已有高手给出答案,各位可以验证一下。
听说此题用间距法也可以做出来,不知有没有哪位神勇能实现
不知道你这个问题是否已经解决, 如果还没有解决的话: