C语言 打印菱形图案
先画图,找关系,搞明白关系就会做题了
//数量关系
// 3.空数 4.星数 1.val:辅助值 2.层数
// * 3=4-1 1 4=mid 1
// *** 2=5-3 3 5=mid+1 2
// ***** 1 5 6=mid+2 3
//******* 0 7 7=mid+3 4
// ***** 1 5 6 5
// *** 2 3 5 6
// * 3 1 4 7
#include<stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
if (n == 0 || n % 2 == 0) {
printf("不是奇数");
return -1;
}
//中值
int mid = n / 2 + 1;
//星星数
int star = 1;
//空格数
int space = 0;
//============================
//打印上半部分
//============================
for (int i = 1; i <= mid; i++) {
//每层基数:中值+i
int val = mid + i - 1;
//空格数
space = val - star;
for (int j = 0; j < space; j++) {//i+2:1 3 5 7 9
printf(" ");
}
//*数
for (int j = 0; j < star; j++) {
printf("*");
}
star += 2;
printf("\n");
}
//============================
//打印下半部分
//============================
space = 1;//重置空格数
for (int i = 1; i < mid; i++) {
//每层基数:中值+i
int val = n - i;
star = val - space; //下半部分先算星星
//空格
for (int j = 0; j < space; j++) {
printf(" ");
}
//*
for (int j = 0; j < star; j++) {
printf("*");
}
space += 1;
printf("\n");
}
return 0;
}
//法二
// 空格数 星星数的数学关系
// * 3=4-i 1=2*1-1 1
// *** 2=4-i 3=2*2-1 2
// ***** 1=4-i 5=2*3-1 3
//******* 0=4-i 7=2*4-1 4
//不分成上下两部分重新算则太难找出关系了。
// ***** 1=i-4 5=7-2*1 5
// *** 2=i-4 3=7-2*2 6
// * 3=i-4 1=7-2*3 7
本文来自博客园,作者:HJfjfK,原文链接:https://www.cnblogs.com/DSCL-ing/p/19174941

浙公网安备 33010602011771号