首页 > 其他分享 >L1-002&L1-003

L1-002&L1-003

时间:2023-10-17 19:46:20浏览次数:28  
标签:case 输出 符号 int ++ 003 002 L1 break

L1-002

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2

这道题目一开始看到我也没有任何思路,主要是对这种打印对应格式的内容只停留在printf了,
分析一下这道题目:
输入符号和个数,根据个数输出对应的沙漏,如果有多的就输出多几个
那么需要一个符号变量,一个总量,还需要几个变量用于计数
然后观察,发现这个沙漏是上下对称的,每个半边都是一个等差数列,前n项和为n方
所以半边半边的看的话,假设每个半边都是m行
也就是说 相当于半边的等差数列有m项,也就是说 n = m方*2-1
所以算出m等于sqrt((n+1)/2)
之后就是输出的问题了,采用上下半分开输出的方式,当然,就上半来说,每行需要输出的
空格数分别是0,1,2,3.....也就是用一个变量,每行输出的时候让它自己加一
这样就能做到每行比上一行多输出一个空格的目的了
然后是具体输出的过程,上半相当于从第m项输出到第一项,也即是
for(int i = m;i>=1;i--)
z这每一次的循环都是在输出每一行的内容
中间嵌套刚才说的输出空格 也就是
for(int j = 0;j<m-i;j++)
m-1一开始是0,然后是1,然后是2....根据这个变化输出不同个数的空格
然后就可以进行符号的输出了
for(int k = 0;k<2*i-1;k++)
2*i-1,相当于等差数列第i行输出2*i-1个符号
这样上半就做完了
下半循环由于上半已经输出了一个符号的情况,因此i从2开始
for(int i = 2;i<=m;i++)
然后再嵌套空格和符号输出即可,
对于数字的计算,定义一个count1,count2,每次k循环输出一个符号的时候++
这样最终用n减去他们俩的和就是剩下的数字了
代码如下
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n = 0, m = 0;
    char c;
    int i = 0, j = 0, k = 0;
    int count1 = 0, count2 = 0, count = 0;
    cin >> n >> c;
    m = sqrt((n + 1) / 2);
    for (i = m; i >= 1; i--)
    {
        for (j = 0; j < m - i; j++)
            cout << " ";
        for (k = 0; k < 2 * i - 1; k++)
        {
            cout << c;
            count1++;
        }
        cout << endl;
    }
    for (i = 2; i <= m; i++)
    {
        for (j = 0; j < m - i; j++)
            cout << " ";
        for (k = 0; k < 2 * i - 1; k++)
        {
            cout << c;
            count2++;
        }
        cout << endl;
    }
    count = count1 + count2;
    cout << n - count << endl;
}

对于这道题目,重点在于把每一行看作等差数列的每一项去处理,就能够做出来了

L1-003

这道题目主要问题在于,一开始我定义了一个char[1000],然后循环输入检测,问题在于每次都需要输入1000位

而不能自己停止,在这种情况下,选择换成了string,检测是否为‘\0’,是说明到末尾了

代码

#include <iostream>
using namespace std;
int main()
{
    string s;
    int a0=0, a1=0, a2=0, a3=0, a4=0, a5=0, a6=0, a7=0, a8=0, a9=0;
    cin >> s;
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] != '/0')
        {
            switch (s[i]){
            case '0':
                a0++;
                break;
            case '1':
                a1++;
                break;
            case '2':
                a2++;
                break;
            case '3':
                a3++;
                break;
            case '4':
                a4++;
                break;
            case '5':
                a5++;
                break;
            case '6':
                a6++;
                break;
            case '7':
                a7++;
                break;
            case '8':
                a8++;
                break;
            case '9':
                a9++;
                break;

            }
        }
    }
    int a[10] = { a0,a1,a2,a3,a4,a5,a6,a7,a8,a9 };
    for (int j = 0; j < 10; j++)
    {
        if (a[j] != 0)
        {
            cout << j << ":" << a[j] << endl;
        }
    }
    return 0;


}

 



标签:case,输出,符号,int,++,003,002,L1,break
From: https://www.cnblogs.com/Arkiya/p/17770483.html

相关文章

  • centos 6.10 安装 python3.10.5 和 openssl1.1.1
    centos6.10安装python3.10.5和openssl1.1.1安装opensslcentos6.10自带的openssl版本太老了,要安装1.0.2以上的版本。如果不安装openssl,python的pip无法联网。下载wgethttps://link.juejin.cn/?target=https%3A%2F%2Fwww.openssl.org%2Fsource%2Fopenssl-1.1.1......
  • [Leetcode] 0027. 移除元素
    27.移除元素题目描述给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:......
  • P8854 [POI2002] 超级马 题解
    这题其实就是搜索,不知道怎么评绿的。题意有一个大小无限的棋盘,有一只马,给定\(n\)种跳法,判断马是否能跳到棋盘所有点。题解搜索马是否可以跳到他上下左右的四个点,因为只要能跳到这四个点,就可以以这四个点为基础跳到其他所有的点。这里有一些细节需要处理:因为每次操作能是......
  • 星嵌OMAPL138+国产FPGA工业开发板 中科亿海微 EQ6HL45系列FPGA 替代spartan-6
    1XQ138F-EVM评估板简介基于TIOMAP-L138(定点/浮点DSPC674x+ARM9)+FPGA处理器的开发板;OMAP-L138是TI德州仪器的TMS320C6748+ARM926EJ-S异构双核处理器,主频456MHz,高达3648MIPS和2746MFLOPS的运算能力;FPGA采用中科亿海微eHiChip6家族EQ6HL45系列芯片,或XilinxSpartan-6系列芯......
  • 常用的相似度度量总结:余弦相似度,点积,L1,L2
    前言 相似性度量在机器学习中起着至关重要的作用。这些度量以数学方式量化对象、数据点或向量之间的相似性。理解向量空间中的相似性概念并采用适当的度量是解决广泛的现实世界问题的基础。本文将介绍几种常用的用来计算两个向量在嵌入空间中的接近程度的相似性度量。本文转载自......
  • [AHOI2002] Kitty猫基因突变
    我们不妨将所有权值打到一棵树上,这很容易想到。考虑暴力,如果我们选择了\(w\)个点,修改后我们会从叶子节点依次合并去计算贡献。很显然我们可以动态规划维护。\(f[p][w][0/1/2]\)表示选了\(w\)个点,后整个区间的状态为\(0/1/2\)。0和1表示整个区间全为这个数。2表示......
  • dhcp服务器迁移---从windows server 2003到windows server 2012
    近期,工作中接触到dhcp服务器的迁移。搜索了网上的一些解决方案,很详细。以下主要是碰到的一些问题以及解决方案。由于2003的版本太老,导出来的配置文件为古老的mdb格式,而导入到2012中的格式需要为txt。 在2003中,尝试用命令(网上可找到)导出来txt格式,但是公司那台服务器实现不了......
  • Perkins 1106D Generation CID 0003 FMI 05 Trouble Code Solution
     ThisillustrationgivethesolutionforPerkins1106Delectricpowergeneration(EPG)CID0003FMI05troublecode.RelatedContents:PerkinsESTCompactAdapterPerkinsEST2023A&2022A&2019ASoftwareFreeDownloadPerkins1106DElectricPower......
  • 固定panel1,panel2适应窗体变化
    固定panel1,panel2适应窗体变化如果您想要固定Panel1并且让Panel2适应窗体大小的变化,可以使用以下方式设置SplitContainer的属性: '设置SplitContainer的FixedPanel属性为Panel1,以固定Panel1的大小SplitContainer1.FixedPanel=FixedPanel.Panel1'设置Doc......
  • 研发三维GIS系统笔记/框架改造/智能指针重构框架-003
    1.使用智能指针重构系统原有的系统都是裸指针,在跨模块与多线程中使用裸指针管理起来很麻烦,尤其是多任务系统中会出现野指针1classCELLTileTask:publicCELLTask2{3public:4CELLQuadTree*_node;5TileId_tileId;6CELL......