本程序可以完美输出,效果如下:

相信你已经很期待代码实现了吧,其实代码真的不难,关键是思想。我说说我的想法吧,首先我构造了一个数组,保存了上面图片中字符一行的一半。聪明的你肯定看出来了,上面多数字符都是相同的,是的我只不过是一行一行的打印了这些重复的字符,当然是用下标访问那个数组了。我把上面图片看成上下对称,左右对称,一行分为左中右。一行的左和右刚好相反,中间则是固定的字符。这是我的思想。那么大家拭目以待吧。下面代码奉上。

/*
打印一个N*N的方阵,N为每边字符的个数(   3〈N〈20   ),
要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,...例子:当N   =5,打印出下面的图形:X   X   X   X   XX   Y   Y   Y   XX   Y   0   Y   XX   Y   Y   Y   XX   X   X   X   X
** 本代码是将矩阵从对角线分割,每一行可分为左、中、右部分
** 我构造了一个数组,根据当前的n生成,对应一条对角线一半的数值。
** 我先输出上半部分,再输出下半部分,因为是对称的,所以i值在一半后面
** 改变增长方向
*/
#include <stdio.h>
#include <stdlib.h>int main(int argc,char *argv[])
{int i, j, n = 0, s, flag;char num[10] = {'X', 'Y'};while ((n < 3) || (n > 20)) {scanf("%d", &n); // 不符合范围则一直循环}j = (n + 1) / 2;for (i = 2;i < j;i++) {num[i] = j - i - 1 + '0';} // 根据当前输入n,构造一个数组flag = 1; // 标记当前是上部分还是下部分s = (n / 2) + 1; // 上下一半的地方for (i = 0;i >= 0;) {for (j = 0;j < i;j++) { // 一行的左边printf("%c,", num[j]);}for (j = i;j < (n - i);j++) { // 一行的中间printf("%c,",num[i]);}for (j = i - 1;j >= 0;j--) { // 一行的右边printf("%c,",num[j]);}printf("\n"); // 一行结束if (flag) { // 当前为上半部分i++; // 上半部分i要自增if (i == s) { // 直到自增到一半位置flag = 0; // 标记值改变i = s - ((n % 2) ? 2 : 3); // 奇数要输出上两行及以上,偶数要输出上3行及以上}} else {i--; // 下半部分只是减}}return 0;
}

打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ),写出来真是泪牛满面啊。相关推荐

  1. c语言:输入一个字符串,统计字母,数字,空格出现的个数,c - 统计字符串字母,空格,数字,其他字符的个数和行数....

    #include #include using namespace std; /* 题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. */ void count() { //统 ...

  2. 打印一个n行n列的方阵

    输入一个正整数n(1≤n≤10),打印一个n行n列的方阵.当n=4时,打印如下方阵: 13 14 15 169 10 11 125 6 7 81 2 3 4 #include <stdio.h& ...

  3. c语言n阶方阵,如何用C语言编出一个N阶螺旋方阵?

    如何用C语言编出一个N阶螺旋方阵? 來源:互聯網  2009-06-01 10:17:07  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 例如:1 ...

  4. tensorflow中打印一个tensor值

    tensorflow中打印一个tensor值 代码: import tensorflow as tf x = tf.ones(shape=[2, 3], dtype=tf.int32,name='x' ...

  5. 算法-打印一个字符串的全部子序列,包括空字符串

    题目:打印一个字符串的全部子序列,包括空字符串 假如该字符串为"abc"则用画图的方式穷举所有可能 代码如下: public class PrintAllSubsquences { ...

  6. php中空心字体怎么打,php打印一个边长为N的实心和空心菱型的方法

    本文实例讲述了php打印一个边长为N的实心和空心菱型的方法.分享给大家供大家参考.具体分析如下: 实心菱型计算方法: $n:边长 $i:当前行,0开始 $rows:总行数 上部 前面空格数=$n-$i ...

  7. 打印一个字符串的所有排列。

    //打印一个字符串的所有排列. void printSequence(char* pChara) {   int i = 0;  static int MAX_LEN = strlen(pChara) ...

  8. Linux基本C编程fork、signal、time以及用printf在终端打印一个GUI窗口 - 使用cygwin

    1 fork, vfork示例 创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(): vfork创建新进程的主要目的在于调用exec函数执行另外的一个新程序,在没调用exec或 ...

  9. java报告(一)编程打印一个三角形的乘法口诀表

    编程打印一个三角形的乘法口诀表(注意对齐),并练习对程序进行单步运行.断点调试等. 实验要求: 1. 在实验报告中给出程序运行结果截图. 2. 源程序代码附到实验报告的最后. 3. 认真填写实验报告并 ...

最新文章

  1. 最强原创综述!当强化学习邂逅组合优化
  2. java获取年初年末_Java用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间...
  3. 【原创】项目管理得失经验总结
  4. python读取表格数据_Python读取Excel数据并根据列名取值
  5. HDU 4135 Co-prime
  6. 基于Vue和axios的音乐播放器——悦听音乐效果展示及代码分享
  7. mybatis控制台打印sql
  8. 蘑菇街更新招股书:Q3亏1.8亿 IPO后陈琪有79%投票权
  9. 在Windows上使用MSVC编译QuaZip
  10. 分类问题的评估指标一览
  11. Redis由分布式锁造成的重大事故
  12. 第3.4节 通过GPIB控制频谱仪
  13. 【2014.01】普林斯顿数学指南(第一卷) [英]Timothy Gowers编 齐民友译
  14. 广东省地方税务局电子办税服务厅--卡在注册ca证书界面的处理
  15. 来给罗永浩和王自如打个分
  16. android 利用shape做控件背景(小圆点,空心带边框背景)
  17. 软件开发怎么对抗抄袭_对抗软件开发中的复杂性
  18. AOJ-AHU-OJ-6 Hero in Maze
  19. mysql 分数换算优良等级_优良中及各个等级是多少分
  20. SQL服务器上SQLserverAgent无法启动的解决方法 SQL2000无法安装的解决办法

热门文章

  1. OpenGL三维模型+常见错误
  2. C语言练习:输出最长的名字
  3. xls文件的上传和下载
  4. Java IO练习--在程序中写一个“HelloJavaWorld你好世界“输出到操作系统文件Hello.txt文件中
  5. 【JVM】GC垃圾回收(三)——零落成泥碾作尘,只有香如故
  6. Android——加速传感器(ACCELEROMETER)的应用
  7. Centos8 安装 MySQL8.0.26
  8. JS之使用Echarts画出人际关系图
  9. USB 协议分析之 HID 设备
  10. 为什么cleancode