洛谷 T412212 菱形(Diamond)

本文介绍了一段C++代码,用于解决一个编程问题,根据输入的指令1或2生成相应长度的矩形矩阵或等腰直角菱形。代码中包含lin和ju两个函数分别处理矩形和菱形的输出。

题目背景

『菱形真漂亮』

『那我帮你打印一个吧』

小 L 和小 Z 开始打印图形了。

题目描述

小 Z 喜欢菱形和矩形,小 L 为了使小 Z 开心,于是打算找你帮『他』写一个程序。

一共需要一下两种操作:

1 x y,输出一个长 x 个单位,宽 y 个单位的矩阵。

2 x,输出一个由 x 行组成的菱形。

其中一个单位长度为 * 的长度。

具体可以看样例。

小 L 要打印 t,所以要输入多组数据。

输入格式

第一行一个正整数:t。

接下来 t 行:

输入一个数 op∈{1,2}。

若 op=1:输入剩下两个正整数 x,y。

若 op=2:输入剩下一个正整数 x。

保证对于 op=2 时:x 为奇数。

输出格式

输出共 t 个:

对于第cnt 个:

输出 Case cnt:

下一行输出要求输出的内容。

输入输出样例

输入 #1

2
1 2 3
1 3 4

输出 #1

Case 1:
**
**
**
Case 2:
***
***
***
***

输入 #2

2
2 5
2 7

输出 #2

Case 1:
  *
 ***
*****
 ***
  *
Case 2:
   *
  ***
 *****
*******
 *****
  ***
   *

说明/提示

本题采用捆绑测试。

请勿输出多余行末空格。

对于所有测试数据保证:1≤t≤2×104,1≤x,y≤20,op∈{1,2}。

AC代码

#include<iostream>
using namespace std;
void lin(int cnt,int n)
{
  int j,i,k,a,b,c;
  cout<<"Case "<<cnt<<":"<<endl;
  for(i=1; i<=n; i++)
  {
    for(k=1; k<=n-i+1; k++)
    {
      cout<<" ";
    }
    for(j=1; j<=2*i-1; j++)
    {
      cout<<"*";
    }
    cout<<endl;
  }

  for(a=1; a<=n+1; a++)
  {
    for(b=1; b<=a-1; b++)
    {
      cout<<" ";
    }
    for(c=1; c<=(n-b+2)*2-1; c++)
    {
      cout<<"*";
    }
    cout<<endl;
  }
}
void ju(int cnt,int x,int y)
{
  cout<<"Case "<<cnt<<":"<<endl;
  for(int i=1; i<=y; i++)
  {
    for(int j=1; j<=x; j++)
    {
      cout<<"*";
    }
    cout<<endl;
  }
}
int main()
{
  int n,cnt=0;
  int o,x,y;
  cin>>n;

  while(n--)
  {
    cnt++;
    cin>>o;
    if(o==2)
    {
      cin>>x;
      x=(x-1)/2;
      lin(cnt,x);
    }
    else
    {
      cin>>x>>y;
      ju(cnt,x,y);
    }
  }
  return 0;
}

c++14 ## 题目描述 Happybob 想做一块煎饼,他决定在一个 $n$ 行 $n$ 列的斜正方形的锅里做一个煎饼,所以煎饼的大小不能超过斜正方形的大小。 由于原料有限,因此 Happybob 的煎饼必须是 $m$ 个长方形覆盖而成的。 Happybob 想知道,他能制作出的最大的煎饼的面积是多少。 --- **形式化题意:** 用 $m$ 个长方形覆盖大小为 $n$ 的斜正方形,最多覆盖多少个格子? **斜正方形和覆盖的定义见说明/提示**。 ## 输入格式 第一行,一个整数 $T$,表示询问数。 接下来 $T$ 行,每行两个整数 $n,m$,表示一次询问。 ## 输出格式 $T$ 行,每一行表示一个询问的答案。 ## 输入输出样例 #1 ### 输入 #1 ``` 3 5 1 6 2 8 2 ``` ### 输出 #1 ``` 9 20 32 ``` ## 说明/提示 ### 样例说明 三次询问的方案是: ![3](https://cdn.luogu.com.cn/upload/image_hosting/m8uup5uc.png) ![4](https://cdn.luogu.com.cn/upload/image_hosting/70a01fpj.png) ![5](https://cdn.luogu.com.cn/upload/image_hosting/lypuap4t.png) (方案不唯一) ### 数据范围 $1\le T\le 50$,$1\le n\le 2\times 10^9$,$1\le m\le\lceil\dfrac{n}{2}\rceil$。 --- ### 形式化定义 **斜正方形的定义:** 更形式化地,建立直角坐标系,定义一个大小为 $n$ 的**斜正方形**的**中心**为原点。 若 $n$ 为奇数,则该**斜正方形**可以描述为所有以 $\big\{(x, y) \big | |x| + |y| \le \lfloor \frac{n}{2} \rfloor \text{ and } x, y \in \Z\big\}$ 中的点为**正方形**中心的边长为 $1$ 的**正方形格子**组成的组合图形。 若 $n$ 为偶数,则该**斜正方形**可以描述为所有以 $\big\{(x, y) \big | |x| + |y| \le \frac{n}{2} \text{ and } (x + \frac{1}{2}), (y + \frac{1}{2}) \in \Z\big\}$ 中的点为**正方形**中心的边长为 $1$ 的**正方形格子**组成的组合图形。 一个 $n=5$ 的斜正方形(淡蓝色为格子中心): ![1](https://cdn.luogu.com.cn/upload/image_hosting/b633qef0.png) 一个 $n=6$ 的斜正方形(淡蓝色为格子中心): ![2](https://cdn.luogu.com.cn/upload/image_hosting/bzq2por3.png) **覆盖方法的定义:** 定义一个长方形 $R$ 覆盖该**斜正方形**,当且仅当 $R$ 为由若干**格子**组成的长方形。 下面是一个覆盖斜正方形的长方形: ![3](https://cdn.luogu.com.cn/upload/image_hosting/7d0jsymo.png) 下面则**不是**覆盖斜正方形的长方形: ![4](https://cdn.luogu.com.cn/upload/image_hosting/2e2374s3.png) ![5](https://cdn.luogu.com.cn/upload/image_hosting/5j8wnvgb.png) ![6](https://cdn.luogu.com.cn/upload/image_hosting/rrxxe2ps.png) 定义一个**格子**被覆盖,当且仅当选择的 $m$ 个覆盖**斜正方形**的长方形中有至少一个完全包含该格子。
12-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值