C语言经典练习3——[NOIP2008]ISBN号码与圣诞树

前言

  • 在学习C语言的过程中刷题是很重要的,俗话说眼看千遍不如手动一遍
  • 因为在真正动手去刷题的时候会暴露出更多你没有意识到的问题
  • 接下来我就为各位奉上两道我认为比较有代表性的题

1. [NOIP2008]ISBN号码

1.1 题目描述

  • 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
  • 识别码的计算方法如下:
    首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
  • 你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。

1.2 输入描述

  • 只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。

1.3 输出描述

  • 共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。

1.4 示例

在这里插入图片描述

1.5 分析

  • 这里我们可以定义一个数组来存储输入的号码,并且可以在这个过程中先计算出和,然后再利用分支结构分别判断 mod11 和不是 11 的情况

1.6 完整代码

#include <stdio.h>

int main() 
{
    char arr1[15] = { 0 };
    int sum = 0;
    int k = 1;//每一位对应的权值
    scanf("%s", arr1);
    for (int i=0; i<11; i++)
    {
        if(arr1[i] != '-')
        {
            sum += (arr1[i]-'0') * k;
            k++;
        }
    }//初始化数组并求和

    if (sum % 11 < 10)
    {
        if (sum % 11 == (arr1[12]-'0'))
        {
            printf("Right\n");
        }
        else
        {
            for (int i=0; i<12; i++)
            {
                printf("%c", arr1[i]);
            }
            printf("%d", sum % 11);
        }
    }
    else
    {
        if (arr1[12] == 'X')
        {
            printf("Right\n");
        }
        else
        {
            for (int i=0; i<12; i++)
            {
                printf("%c", arr1[i]);
            }
            printf("X");
        }//末尾为X的情况
    }//判断ISBN号码是否正确

    return 0;
}
  • 通过了!

在这里插入图片描述

2. 圣诞树

2.1 题目描述

  • 今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。

2.2 输入描述

  • 输入圣诞树的高度h,1<=ℎ<=100

2.3 输出描述

  • 输出对应的圣诞树

2.4 示例

在这里插入图片描述
在这里插入图片描述

2.5 分析

  • 就拿n=3来举例,可以把第一行,第四行,第七行,分别看成打印了一次“ * ”和五个空格,打印了两次“ * ”和五个空格,打印了三次“ * ” 和五个空格
  • 简单来说就是把一个星号和五个空格当作一个整体,然后分别打印一次,两次,三次,这样就容易用输入的 n 表示了
  • 同样的,第二行,第五行和第八行也是一样的,这里用图示更清晰

在这里插入图片描述

  • 从这张图可以看出来从上往下,三个为一组,每组的每行都是打印一个、两个、三个矩形(整体)
  • 打印树叶的总循环数为 3 * n
    每一行最前面的空格数为3 * n - 1,这里可以再定义一个变量用来存储每行最前面需要打印的空格数
  • 然后在每行打印完后再减一

2.6 完整代码

#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	int kg = 3 * n - 1;//每行开始的空格数

	for (int i = 1; i <= 3 * n; i++)
	{
		for (int j = 0; j < kg; j++)
		{
			printf(" ");
		}
		kg--;

		if (i % 3 == 1)
		{
			for (int j = 0; j < (i / 3) + 1; j++)
			{
				printf("*     ");
			}
			printf("\n");
		}
		else if (i % 3 == 2)
		{
			for (int j = 0; j < (i / 3) + 1; j++)
			{
				printf("* *   ");
			}
			printf("\n");
		}
		else
		{
			for (int j = 0; j < i / 3; j++)
			{
				printf("* * * ");
			}
			printf("\n");
		}
	}//打印树叶

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 3 * n - 1; j++)
		{
			printf(" ");
		}
		printf("*\n");

	}//打印树根
	return 0;
}

2.7 结果验证

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/331059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL运维篇(四)读写分离

一、介绍 读写分离&#xff0c;简单地说是把对数据库的读和写操作分开&#xff0c;以对应不同的数据库服务器。主数据库提供写操作&#xff0c;从数据库提供读操作&#xff0c;这样能有效地减轻单台数据库的压力。 通过 MyCat 即可轻易实现上述功能&#xff0c;不仅可以支持 My…

搜索与图论第三期 树与图的深度优先遍历

前言 该部分内容实际上是DFS的一个扩展&#xff0c;只要是会了DFS之后&#xff0c;这部分其实也差不多&#xff0c;直接上例题啦就。 1…

STM32F103标准外设库——SysTick系统定时器(八)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

架构10- 理解架构的模式4-数据管理模式

一、分片模式&#xff1a;将数据存储区分为多个水平分区或分片&#xff0c;以便更好地管理和处理大量数据。 当业务量达到单个业务表通过缓存和队列削峰等措施后的平均TPS超过1万时&#xff0c;我们不得不考虑数据库分片。 在进行分片之前&#xff0c;我们需要根据数据分布、压…

Qt编程之仿gnome-terminal终端样式 +颜色文字显示

Qt仿linux 终端样式 颜色文字 1.说再多废话不如直接show code2.实现效果 本文采用QTextBrowser作为文本显示窗口&#xff0c;进行文本的显示。本文实例实现的效果并没有终端的输入效果&#xff0c;这里只是提供一些仿终端样式思路。 1.说再多废话不如直接show code 1.ui文件…

SpringMVC入门案例

引言 Spring MVC是一个基于MVC架构的Web框架&#xff0c;它的主要作用是帮助开发者构建Web应用程序。它提供了一个强大的模型驱动的开发方式&#xff0c;可以帮助开发者实现Web应用程序的各种功能&#xff0c;如请求处理、数据绑定、视图渲染、异常处理等。 开发步骤 1.创建we…

XSS漏洞:xss.haozi.me靶场通关

xss系列往期文章&#xff1a; 初识XSS漏洞-CSDN博客 利用XSS漏洞打cookie-CSDN博客 XSS漏洞&#xff1a;xss-labs靶场通关-CSDN博客 XSS漏洞&#xff1a;prompt.mi靶场通关-CSDN博客 目录 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C…

JS取余运算符 %,ES2023 新增数组方法Array.at

取余运算符&#xff08;%&#xff09;的作用就是用来两个操作数进行相除运算之后的余数。 注意&#xff0c;两个操作数取余是有循环范围的&#xff0c;这个范围为 0 - 第二个参数 - 1。 如下图&#xff1a; 对于6取余的话&#xff0c;得到的取余数据就会一直在0-5之间进行循环…

克魔助手工具详解、数据包抓取分析、使用教程

目录 摘要 引言 克魔助手界面 克魔助手查看数据捕获列表 数据包解析窗口 数据包数据窗口 克魔助手过滤器表达式的规则 抓包过滤器实例 总结 参考资料 摘要 本文介绍了克魔助手工具的界面和功能&#xff0c;包括数据包的捕获和分析&#xff0c;以及抓包过滤器的使用方…

精品基于Uniapp+springboot农产品安全领域的信息采集系统App

《[含文档PPT源码等]精品基于Uniappspringboot农产品安全领域的信息采集系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;sprin…

arcgis javascript api4.x以basetilelayer方式加载arcgis发布的栅格切片服务

需求&#xff1a; 以arcgis js api的basetilelayer加载arcgis发布的栅格切片服务 效果图&#xff1a; 其中和tileinfo和lods&#xff0c;这样获取&#xff1a; https://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer/?fpjson urltemplate&#xff1a; …

C++发展史

目录 什么是C C的发展史 C的重要性 C在实际工作中的应用 “21天教你学会C” 什么是C 先看看祖师爷&#xff0c;记得多拜拜&#x1f92d; C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度…

算法学习系列(二十三):最小生成树问题

目录 引言一、最小生成树问题二、Prim算法三、Kruskal算法 引言 这个最小生成树问题其实思想都非常的简单&#xff0c;然后代码也是比较简单的&#xff0c;很多人听到这个问题觉得难&#xff0c;比如说跟我一样&#xff0c;主要是因为不知道这个算法&#xff0c;就是一种未知的…

原生SSM整合(Spring+SpringMVC+MyBatis)案例

SSM框架是Spring、Spring MVC和MyBatis三个开源框架的整合&#xff0c;常用于构建数据源较简单的web项目。该框架是Java EE企业级开发的主流技术&#xff0c;也是每一个java开发者必备的技能。下面通过查询书籍列表的案例演示SSM整合的过程. 新建项目 创建文件目录 完整文件结…

CRM系统的销售漏斗是什么?如何提升销售效率?

​ CRM管理系统有许多重要的功能&#xff0c;很多人不太了解什么叫销售漏斗。网上关于CRM销售漏斗的讲解。看完以后仿佛懂了&#xff0c;细心想了想&#xff0c;好像没说透。下面说说CRM销售漏斗如何指导销售人员行动。简单来说就是分解销售目标、规划销售时间、预测销售业绩。…

【时间复杂度】时间复杂度优化法则简讲

一、引言 时间复杂度是衡量算法运行效率的一项重要指标&#xff0c;它描述了随着输入规模的增加&#xff0c;算法的执行时间如何增长。在算法设计与分析中&#xff0c;我们经常面临着优化时间复杂度的任务&#xff0c;以便提高程序的性能。本博客将深入探讨时间复杂度的优化法…

【MYSQL】事务隔离级别

脏读、幻读、不可重复读 脏读 一个事务正在对一条记录做修改&#xff0c;在这个事务完成并提交前&#xff0c;另一个事务也来读取同一条记录&#xff0c;读取了这些未提交的“脏”数据&#xff0c;并据此做进一步的处理&#xff0c;就会产生未提交的数据依赖关系。这种现象被形…

删除edge浏览器文本框储存记录值以及关闭自动填充

当我们点击输入框时总会出现许多以前输入过的信息。 一、删除edge浏览器文本框储存记录值 1、首先按下↓键选中你想删除的信息 2、然后按ShiftfnDel鍵(MAC)/ShiftDel鍵(Win)&#xff0c;就可以成功删除。 二、关闭自动填充。 1、在地址栏输入edge://wallet/settings跳转到以…

语言大模型的分布式训练与高效微调指南

原文&#xff1a;语言大模型的分布式训练与高效微调指南 - 知乎 目录 收起 1 分布式训练 2 ZeRO驱动的数据并行 3 全分片数据并行 4 实现 5 高效微调 6 实践指南 7 关于DeepSpeed和FSDP的更多内容 OneFlow编译 翻译&#xff5c;杨婷、宛子琳 最近语言大模型&#xff…

[windows]给WSL安装一个桌面gnome版本

【安装前提】 请提前安装好WSL系统&#xff0c;最好ubuntu系统>18.04 【安装步骤】&#xff1a; WSL 不支持 systemd 而 Gnome 桌面又是基于 systemd&#xff0c;所以先解决这个问题。 sudo apt update sudo apt install git git clone https://github.com/DamionGans/u…