XTU OJ 1397 Patchouli的金字塔

该程序使用C语言实现,根据输入的数字生成特定形状的棋盘图案。它首先计算出棋盘的层数,然后逐层绘制斜线和星号构成的棋盘结构。在最后一层,它会填充额外的星号,形成一个不完整的棋盘图案。程序中包含了条件判断、循环和字符串操作等元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<string.h> 
char a[25][45];
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    { 
        memset(a,' ',sizeof(a));
        int k,level;
        scanf("%d",&k);
        if(k==1) level=1;
        else{
            for(int i=1;;i++){
                if(k<=(i+1)*(i+1)&&k>i*i){
                    level=i+1;
                    break;
                }
            }
        }
            a[0][(level)*2+0]='*';
            a[0][(level)*2+1]='\0';    
            for(int i=1;i<level;i++){
                for(int j=0;j<i;j++){
                    a[i*2-1][(level-i+1)*2+j*4-1]='/';
                    a[i*2-1][(level-i+1)*2+j*4+1]='\\';
                } 
                a[i*2-1][level*2+i*2]='\0';

                
                a[i*2][(level-i)*2]='*';
                for(int j=0;j<i;j++){
                    a[i*2][(level-i+1)*2+j*4]='-';
                    a[i*2][(level-i+2)*2+j*4]='*';
                } 
                a[i*2][level*2+1+i*2]='\0';    
            }
            
            int left=k-(level-1)*(level-1);
            int time=(left+1)/2;
            a[level*2-1][1]='/';
            int j=1;
            while(j<=left){
                a[level*2-1][1+j*2]='\\';
                j++;
                a[level*2-1][1+j*2]='/';
                j++;
            }
            a[level*2-1][(left+1)*2]='\0';
            
            a[level*2][0]='*';
            for(int j=0;j<time;j++){
                a[level*2][2+j*4]='-';
                a[level*2][4+j*4]='*';
            }
            a[level*2][time*4+1]='\0';    
            for(int i=0;i<=level*2;i++) printf("%s\n",a[i]);

//printf("%d\n",level);
//printf("剩余个数%d\n",left);
//printf("底部次数%d\n",time);
    }
    return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值