根据输入的行数输出钻石图案
目前只打印了四分之一。代码如下
#include<stdio.h>
int main()
{
int a,i,b=0;
printf("请输入一个整数:");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
for(b=0;b<=i;b++)
{
if(i>b)
{
printf("*\t");
}
else
{
printf("\n");
}
}
}
}
钻石图案是啥样啊???贴个图看看
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=(n-1);j>i;j--)
printf(" ");
for(j=0;j<=2*i;j++)
printf("* ");
printf("\n");
}
for(i=0;i<n-1;i++)
{
for(j=0;j<=i;j++)
printf(" ");
for(j=2*(n-1);j>=2*(i+1);j--)
printf("* ");
printf("\n");
}
return 0;
}
跑了一下这段代码,你说的钻石图形应该就是打印一个菱形吧,这道题的思路其实和打印沙漏差不多,关键在于合理计算每层输出的空格和字符的数量,打印偶数和奇数分别是不同的情况,但是可以确定的一点是
(int)((行数 / 2)+1) 这一行是最长的一行,于是计算排列规律,偶数最后一行不输出即可
在最长一行前,每行字符长为( 2 * i - 1)
最长行字符长(总行数为奇数)=行数
最长行字符长(总行数为偶数)=行数+1
每行空格数=(最长行字符长-每行字符长)/ 2
在最长一行后,相反
具体算法csdn有几个帖子可参考
https://blog.csdn.net/yasenRK/article/details/103624056
https://howard2005.blog.csdn.net/article/details/79409408
如果是要偶数行数去掉顶部,反着来就行
程序思路及注释如下,题主可做参考:
#include <stdio.h>
#include <stdlib.h>
int main(){
int line; // 菱形总行数
int column; // 菱形总列数
int i; // 当前行
int j; // 当前列
printf("请输入你要打印的行数:");
scanf("%d", &line);
column = line; // 总行数和总列数相同
for(i=1; i<=line; i++){ // 遍历所有行
if(i<(line+1)/2+1){ // 上半部分(包括中间一行)
for(j=1; j<=column; j++){ // 遍历上半部分的所有列
if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){
printf("*");
}else{
printf(" ");
}
}
}else{ // 下半部分
for(j=1; j<=column; j++){ // 遍历下半部分的所有列
if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){
printf("*");
}else{
printf(" ");
}
}
}
printf("\n");
}
return 0;
}
测试图:
如有帮助,还请采纳!谢谢!
什么样的钻石图案?
int main()
{
int a, i, b = 0;
printf("请输入一个整数:");
scanf("%d", &a);
for (i = 0; i <= a; i++)
{
for (b = 0; b < a - i; b++)
putchar('\t');
for (b = 0; b < 2 * i - 1; b++)
printf("*\t");
printf("\n");
}
for (i = a - 1; i > 0; i--)
{
for (b = 0; b < a - i; b++)
putchar('\t');
for (b = 0; b < 2 * i - 1; b++)
printf("*\t");
printf("\n");
}
}