C# 使用二维数组C创建表矩阵#
我正在尝试创建一个程序,在这个程序中,您可以向用户请求一个数字,创建一个尽可能接近正方形的数组,并用1填充用户指定的数字。您必须使用二维阵列。下面是一个示例,展示了它的外观: 用户输入:16 输出:C# 使用二维数组C创建表矩阵#,c#,arrays,multidimensional-array,2d,C#,Arrays,Multidimensional Array,2d,我正在尝试创建一个程序,在这个程序中,您可以向用户请求一个数字,创建一个尽可能接近正方形的数组,并用1填充用户指定的数字。您必须使用二维阵列。下面是一个示例,展示了它的外观: 用户输入:16 输出:1234 5 6 7 8 9 10 11 12 13 14 15 16 我曾尝试通过循环运行它来实现这一点,但没有成功,我希望有人能指导我如何实现这一点。首先,让我们获取用户输入: int num; while(!int.TryParse(Console.ReadLine(), out num
1234
5 6 7 8
9 10 11 12
13 14 15 16
我曾尝试通过循环运行它来实现这一点,但没有成功,我希望有人能指导我如何实现这一点。首先,让我们获取用户输入:
int num;
while(!int.TryParse(Console.ReadLine(), out num) || num < 1)
{
Console.WriteLine("Invalid number!");
}
然后创建二维阵列:
var array = new int[sideLength, sideLength];
然后把数字写进去:
for (int row = 0; row < sideLength; row++)
{
for (int column = 0; column < sideLength; column++)
{
var value = row * sideLength + (column + 1);
if (value > num)
break;
array[row, column] = value;
}
}
现在打印阵列:
for (int row = 0; row < sideLength; row++)
{
for (int column = 0; column < sideLength; column++)
{
var value = array[row, column];
if (value == 0)
{
Console.WriteLine("");
goto breakBoth;
}
Console.Write($"{value.ToString(format)} ");
}
Console.WriteLine("");
}
breakBoth:
输入:14
输出:
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16
01 02 03 04
05 06 07 08
09 10 11 12
13 14
如果要显示0
s(如果不是整行),可以从打印部分删除0复选框
这可以优化吗?
对!!数组是无用的,它只包含递增的数字。如果不需要二维阵列,您可以完全删除它,并对打印功能进行一些修改
int num;
while(!int.TryParse(Console.ReadLine(), out num))
{
Console.WriteLine("Invalid number!");
}
var sideLength = (int)Math.Ceiling(Math.Sqrt(num));
var format = new string('0', num.ToString().Length);
for (int row = 0; row < sideLength; row++)
{
for (int column = 0; column < sideLength; column++)
{
var value = row * sideLength + (column + 1);
if (value > num)
{
Console.WriteLine("");
goto breakBoth;
}
Console.Write($"{value.ToString(format)} ");
}
Console.WriteLine("");
}
breakBoth:
int-num;
而(!int.TryParse(Console.ReadLine(),out num))
{
Console.WriteLine(“无效号码!”);
}
var sideLength=(int)数学上限(Math.Sqrt(num));
var format=新字符串('0',num.ToString().Length);
对于(int row=0;row数值)
{
控制台。写线(“”);
二者皆去;
}
Write($“{value.ToString(format)}”);
}
控制台。写线(“”);
}
两者兼而有之:
这段代码做同样的事情,但没有2d数组。问题是什么?你想让别人写这样的程序吗?我试着通过运行循环来实现,但没有成功,所以我请求帮助将你尝试过的代码循环添加到问题中,这样我们就可以看到可能的错误。这绝对是有道理的,“数学上限”是什么函数do?@vanquish_vi它将平方根函数的结果取整。将
double
转换为int
将其向下舍入,这意味着除非它是一个平方数(当平方根函数的结果是一个整数时),否则无法得到整个表。通过四舍五入,您可以得到整个输出,但它并不总是正方形(例如,输入为14)。我建议您删除它,并尝试它自己与不同的投入。
01 02 03 04
05 06 07 08
09 10 11 12
13 14
int num;
while(!int.TryParse(Console.ReadLine(), out num))
{
Console.WriteLine("Invalid number!");
}
var sideLength = (int)Math.Ceiling(Math.Sqrt(num));
var format = new string('0', num.ToString().Length);
for (int row = 0; row < sideLength; row++)
{
for (int column = 0; column < sideLength; column++)
{
var value = row * sideLength + (column + 1);
if (value > num)
{
Console.WriteLine("");
goto breakBoth;
}
Console.Write($"{value.ToString(format)} ");
}
Console.WriteLine("");
}
breakBoth: