控制台文字矩阵、菱形排列(充分展示用逻辑替代内循环的处理技巧)

那个矩阵排列确费不少脑力哦,菱形用数组倒序填,这些例子都是给初学参考。

            var 数组 = Enumerable.Repeat(0, 7).ToArray();
            string[] 字符组 = new string[7];
            int 数 = 7, 序 = 0, 填 = 0;
            foreach (var 矩 in Enumerable.Range(1, 7))
            {
                if (矩 <= 4) 填++; else 填--;
                foreach (var 阵 in Enumerable.Range(序, 数)) { 数组[阵] = 填; 字符组[阵] = " 阿弥陀佛"[填].ToString(); }
                if (矩 < 4) { 数 -= 2; 序++; } else { 数 += 2; 序--; }
                //Console.WriteLine(string.Join(" ", 数组));
                Console.WriteLine(string.Concat(字符组));
            }

菱形

            string 啊啊啊 = ""; string[] 啊啊 = new string[15];
            foreach (var 啊 in Enumerable.Range(1, 8))
            {
                啊啊[啊 - 1] = "        ".Remove(8 - 啊) + 啊啊啊 + "☆\r";
                啊啊[15 - 啊] = "        ".Remove(8 - 啊) + 啊啊啊 + "☆\r";
                啊啊啊 += "☆";
            }
            foreach (var 啊啊啊啊 in 啊啊) Console.WriteLine(啊啊啊啊);

c++

	int 层(8), 数(1), 计(8);
	do
	{
		if (计 > 数) 
			cout << " ";
		else
			cout << " " << 数;
		if (!--计)
		{
			cout << endl;
			计 = 8;
			数++;
			层--;
		}
	} while (层);
	层 = 计 = 7; 数 -= 2;
	do
	{
		if (计 == 7)
			cout << " ";
		if (计 > 数)
			cout << " ";
		else
			cout << " " << 数;
		if (!--计)
		{
			cout << endl;
			计 = 7;
			数--;
			层--;
		}
	} while (层);


优化代码:

	int 层(8), 数(1), 计 = 层; bool 控制(false);
	do/*数字菱形*/
	{
		if (控制)if (计 == 7)
			cout << " ";
		if (计 > 数) 
			cout << " ";
		else
			cout << " " << 数;
		if (!--计)
		{
			cout << endl;
			计 = 控制 ? 7 : 8;
			控制 ? 数-- : 数++;
			层--;
		}
		if (!控制)if (!层)
		{
			控制 = true;
			层 = 计 = 7;
			数 -= 2;
		}
	} while (层);


点击打开链接

	/*C语言基础:for循环嵌套,这段代码该怎样写更简练*/
	int i, j, k, z;
	for (i = 0, z = -4; ; ++i, z++)
	{
		if (z > 0) i -= 2;
		for (k = 0; k <= 3 - i; ++k)
			printf_s(" ");
		for (j = 0; j <= 2 * i; ++j)
			printf_s("*");
		printf_s("\n");
		if (i == 0 && z > 0)
			break;
	}


VB:

        '2-9范围内自动生成菱形
        Dim 数 = 9, 个 = 0, 空格 = String.Join(" ", New String(数) {})
        For 序 As Integer = 1 To 数 Step 1
            空格 = 空格.Remove(空格.Length - 1)
            Console.WriteLine(空格 + String.Join("", Enumerable.Repeat(序, 序 + 个)))
            个 += 1
        Next
        个 -= 1
        For 序 As Integer = 数 - 1 To 1 Step -1
            空格 += " "
            个 -= 1
            Console.WriteLine(空格 + String.Join("", Enumerable.Repeat(序, 序 + 个)))
        Next


c++字符数组形式:

	/*用C++编写程序,用数组char a[][]显示宽瘦菱形,设置维度公式第一项值,如果显示数字则在2-9单字范围,如果显示单字符则任意长度范围内自动生成*/
	const int 维(9 * 2 - 1);
	int 数(0), 计(0), 反(维 - 1), 层((维 + 1) / 2);
	char 菱形[维][维] = { {} };
	do
	{
		菱形[计][数] = (数 + 计 < 层 - 1 || 数 + 计 >= 层 + 计 + 计) ? ' ' : '*';
		if (计 <= !(层 % 2) ? 层 / 2 : 层 / 2 + 1)
			菱形[反 - 计][数] = 菱形[计][数];/*生成反向*/
		if (++数 >= 维)
		{
			数 = 0;
			计++;
		}
	} while (计 < 层);
	数 = 计 = 0;
	do
	{
		std::cout << 菱形[计][数];
		if (++数 >= 维)
		{
			std::cout << std::endl;
			数 = 0;
			计++;
		}
	} while (计 < 维);
	数 = 计= 0;
	do
	{
		std::cout << 菱形[计][数] << " ";/*拉宽*/
		if (++数 >= 维)
		{
			std::cout << std::endl;
			数 = 0;
			计++;
		}
	} while (计 < 维);



输出倒梯形

	cout << endl;
	int 层(7), 计(7), 数(7);
	do
	{
		if (计 == 7)
			cout << " ";
		if (计 > 数)
			cout << " ";
		else
			cout << "**";
		if (!--计)
		{
			cout << endl;
			计 = 7;
			数--;
			层--;
		}
	} while (层 > 1);
	cout << endl;

按输入的整数输出图形的2种写法

int 输入整数(0), 层(8), 数(1), 计(8);
std::cin >> 输入整数;
层 = 计 = 输入整数;
do
{
	cout << (计 > 数 ? " " : "* ");
	//cout << (计 > 数 ? " " : "*") << (计 > 数 - 1 ? "" : "*");
	if (!--计)
	{
		cout << endl;
		计 = 输入整数;
		数++;
		层--;
	}
} while (层);

	int 位(5), 个(1), 数(0), 量(18), 起(0), 转(1);
	cout << "http://ask.csdn.net/questions/338810 java只用两个for循环输出N个菱形。请输入层数:" << endl;
	cin >> 量;
	//do
	//{
	//	cout << ((数 < 位 || 数 >= 位 + 个) ? " " : "*");
	//	if (++数 > 10)
	//	{
	//		cout << endl;
	//		数 = 0;
	//		++起;
	//		位 += 转 ? -1 : 1;
	//		个 += 转 ? 2 : -2;
	//	}
	//	if (位 <= 0 && 转) 转 = 0;
	//	if (位 >= 5 && !转) 转 = 1;
	//} while (起 < 量);
	for (起 = 0; 起 < 量; 起++)
	{
		for (数 = 0; 数 <= 10; 数++)
			cout << ((数 < 位 || 数 >= 位 + 个) ? " " : "*");
		cout << endl;
		位 += 转 ? -1 : 1;
		个 += 转 ? 2 : -2;
		if (位 <= 0 && 转) 转 = 0;
		if (位 >= 5 && !转) 转 = 1;
	}




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值