A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


          昨天看到论坛里有同学打印菱形,自己尝试了下,其中也有些问题,希望理解的同学能够提示下~           这边先说一下我问题:
  1. #include <stdio.h>
  2. #include <math.h>
复制代码
个人感觉思路大家一看就能明白,就是每行先打印空格,再打印*,代码也实现了要求,当前行有abs((row+1)/2,i)多个空白(*前的空白,i从1开始)也还算好理解,但是当前行有((row+1)/2-abs((row+1)/2,i))*2-1多个* 是不是太傻逼了?我也是利用数学方法找到得数列之间的关系,请问有没有更简单的方法来体现当前行数与*个数的方法,或者有其他思路可以提供...,谢谢!:handshake


2 个回复

倒序浏览
  1. #include <stdio.h>
  2. #include <math.h>
  3. //我要用abs函数;
  4. int main(int argc, const char * argv[]) {
  5.     int row = 0;
  6.     printf("请输入想要打印的行数:");
  7.     // 由于输出的时菱形,所以行数恰好等于最多行的*个数;
  8.     scanf("%d",&row);
  9.    
  10.    
  11.     for(int i = 1;i<=row;i++)          // 外循环,确定当前打印第几行
  12.     {
  13.         for(int j=0;j<abs((row+1)/2,i);j++)   // 这个循环用于打印前面的空白; 当前行空白的个数与当前行的关系是abs((row+1)/2,i)
  14.         {
  15.             printf(" ");
  16.         }
  17.         int starCount =((row+1)/2-abs((row+1)/2,i))*2-1;  // 当前行*的个数与行的关系是((row+1)/2-abs((row+1)/2,i))*2-1
  18.         for(int m = 0;m <starCount;m++)       // 这个循环用于打印后面的*;
  19.         {
  20.             printf("*");
  21.         }
  22.         printf("\n");
  23.     }
  24.     return 0;
  25.    
  26. }
复制代码


代码没贴上,这边补一下:funk:
回复 使用道具 举报
恩还不错,注释的挺完善
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马