《编程思维与实践》1038.排版

news2024/12/25 12:31:28

《编程思维与实践》1038.排版

题目

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

思路

分两个步骤进行解决:

1.在给定长度下找到每一行可以容纳的最多单词数(单词长度<M/2保证每行至少有两个单词);

2.输出时补充额外的空格.

其中,第一个步骤可以通过分割字符串将每个字符串存起来,再找到第一个超过给定长度M的单词来实现.

主要考虑第二个步骤:

要满足两个条件,空格的分布尽可能平均,同时空格尽可能靠右.

如:8个空格分在3个位置则每个位置空格数为2 3 3.

以8为例: 原先保证至少有一个空格 记为1 1 1 ,需要额外填充5个空格,5/3取整为1,也就是平均每个还需要补充1个空格,

则1 1 1 -> 2 2 2 ,还需要填充2个空格,这时只能填充在后两个位置上(靠右原则),2/2=1, 所以最后2 2 2-> 2 3 3.

注意的点:

1.第一个步骤中统计长度时需要包含两个单词之间本身的空格(统计每个单词时算上前置的空格即可).

2.对最后一行的输出需要进行判定,正常输出包含本身的空格即可.

3.最后一个单词后面没有空格.

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

int main()
{
	int T;
	scanf("%d",&T);
	for(int i=0;i<T;i++)
	{
		int M;
		scanf("%d",&M);
		getchar();   //读回车 或者直接scanf("%d\n",&M)
		char s[2001];
		gets(s);
        printf("case #%d:\n",i);
        
        int count=0;    //统计给的数据有多少个字符串
		for(int j=0;j<strlen(s);j++) 
		{
			if((s[j]!=' '&&s[j+1]==' ')||(s[j]!=' '&&s[j+1]=='\0'))  //通过空格来计数
			{
				count++;
			}
		}
		
		char str[count][100];  //将每个字符串存起来 
		int k=0;
		for(int j=0;j<strlen(s);j++)
		{
            int m=0;
			while(isspace(s[j]))
			{
				j++;
			}
			while(j<strlen(s)&&!isspace(s[j])) //防止越界(条件放前)
			{
				str[k][m++]=s[j++];
			}
			str[k++][m]='\0';
		}
        
		int len=0; //存每行中含有元素个数(含两者之间的空格)
		int num=0; //计算每行的字符串个数 
		for(int j=0;j<count;j++)
		{
            len+=len==0?strlen(str[j]):strlen(str[j])+1;  //第一个单词前没空格
			num++;
			if(len>M||j==count-1)  //可以输出的情况,同时找到第一个超过给定长度M的单词
			{
				if(len>M)  //求一行中可以输出的最多单词数
				{
					len-=strlen(str[j])+1;    
                    num--;
					j--;
				}
				if(j!=count-1)   //不是最后一行输出
				{
					int space_num=M-len;    //需要额外输出的空格数   
					int space=space_num/(num-1);   //平均数 至少有两个单词保证num≠1
                    int temp=space;  //需要输出的空格数 (如2 2 2->2 3 3需要存3)
					for(int k=j+1-num;k<=j;k++)
					{
						printf("%s",str[k]);
						if(k!=j)   //最后一个单词后面没空格
						{
							printf(" ");
						}
						for(int p=0;p<temp;p++)
						{
							printf(" ");
						}
						space_num-=space*(num-1);   //更新需要额外输出空格数
                        num--;
						if(num!=1)
						{
							space=space_num/(num-1);	  //更新平均数
                            temp+=space;   //上一位的空格数+平均数
						}
					}
					printf("\n");
					len=0;   //重置len和num
					num=0;	
				}
				else   //最后一行输出
				{
					for(int k=j+1-num;k<=j;k++)
					{
						printf("%s",str[k]);
						if(k!=j)
						{
							printf(" ");
						}
					}
					printf("\n");
				}
			}
		}
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目上线之云服务器环境篇(二)——Tomcat的安装与配置

Java项目上线之云服务器环境篇&#xff08;二&#xff09;——Tomcat的安装与配置 Tomcat的选择&#xff1a; 云服务器tomcat的选择最好与本机项目运行的tomcat版本号一致&#xff0c;避免一些不必要的问题。 配置步骤&#xff1a; 1、首先进入云服务器创建好放置tomcat的文件…

UE5实现Runtime环境下绘制线功能

文章目录 1.实现目标2.实现过程2.1 C++实现2.2 蓝图调用3.参考资料1.实现目标 UE5在Runtime环境下基于PDI绘制线,GIF动图如下: 2.实现过程 在UE5 Runtime环境下常用的绘制线方法有使用以下几种方式。一是基于SplineMeshComponent,即使用已有的点位去初始化样条线,然后在挂…

Ae:合成查看器 - 视图选项

合成查看器、素材查看器、图层查看器等面板底部的视图选项大同小异。 放大率弹出式菜单 Magnification ratio popup 用于显示和控制当前的放大率。 默认为适应当前面板大小。 更改放大率时&#xff0c;只是改变了面板中预览的外观&#xff0c;而不是合成的实际分辨率和像素。 适…

数据挖掘实验-week8-关联规则挖掘(Association Rule Mining)

Contents 0. 引言0.1 关联规则挖掘0.2 Apriori算法 实验Step 1&#xff1a;Familiarize yourself with the arules package in R.1.1 Load the package.1.2 To load data into R enter.1.3 To get information about the total number of transactions in a file sample1.csv e…

【requests模块上】——02爬虫基础——如桃花来

目录索引 requests请求&#xff1a;1. 基于get请求&#xff1a;*基础写法&#xff1a;**带参数的get请求&#xff1a;* 2. 基于post请求&#xff1a; 获取数据&#xff1a;1. 获取json数据&#xff1a;2. 获取二进制数据&#xff1a; 引入&#xff1a; requests是python的第…

不得不说的结构型模式-享元模式

目录 享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a; 下面是一个简单的C代码案例 下面是面试中可能遇到的问题&#xff1a; 享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a; 是一种结构型模式&#xff0c;它通过共享对象来减少系统中对象…

第四范式发布「式说」大模型,以生成式AI重构企业软件(AIGS)

4月26日&#xff0c;第四范式首次向公众展示其大模型产品「式说3.0」&#xff0c;并首次提出AIGS战略&#xff08;AI-Generated Software&#xff09;&#xff1a;以生成式AI重构企业软件。式说将定位为基于多模态大模型的新型开发平台&#xff0c;提升企业软件的体验和开发效率…

湿法冶金铼提取工艺

湿法冶金 通过溶液分离金属的技术 湿法冶金是利用浸出剂在一定温度压力下与矿石接触&#xff0c;把矿石中有用的金属溶解后再从溶液中回收有价金属的一种工艺&#xff0c;因为其过程大都是在水溶液中进行&#xff0c;所以又被称为“水法冶金”。 01 湿法冶金工艺特点及工艺流…

AI智能课程:第五讲chatGPT搞定APP小程序

内容总结 作业 目录 APP&小程序测试初识 ### APP&小程序测试的区别&#xff1f; 设计APP&小程序功能测试用例 设计APP&小程序功能测试用例–继续优化 设计APP&小程序测试用例-中断场景 设计小程序测试用例–补充小程序功能专项 APP&小程序兼容性测试…

Raft 共识算法4-选举限制

Raft 共识算法4-选举限制 Raft算法中译版地址&#xff1a;https://object.redisant.com/doc/raft%E4%B8%AD%E8%AF%91%E7%89%88-2023%E5%B9%B44%E6%9C%8823%E6%97%A5.pdf 英原论文地址&#xff1a;https://raft.github.io/raft.pdf Etcd Assistant 是一款 etcd 可视化管理软件&a…

大数据Doris(四):FE部署及启动

文章目录 FE部署及启动 一、创建doris 部署目录 二、上传安装包并解压

Monaco Editor编辑器教程(二八):Monaco 与 VS Code 两个项目的联系与异同点

前言 很多人知道前端代码编辑Monaco Editor 与VS Code 有关系,但却不清楚其中的细节,本篇文章就带大家了解一下两者的关系和异同点。 表面对比 首先,这两个项目都是来自微软,其中VS Code 项目Github 144K star,是基于CS架构,客户端-服务端架构。主要的技术栈是 electo…

你不知道的自动装箱和拆箱

“改天是明天&#xff0c;下次是每一次&#xff0c;以后是以后的每一天” 自动装箱和拆箱 装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int);调用方法:I…

骨传导蓝牙耳机哪款好,分享几款性能比较高的骨传导耳机

骨传导耳机是一种新型的耳机&#xff0c;它将声音转化为不同频率的机械振动&#xff0c;通过人的颅骨、骨迷路、内耳淋巴液、螺旋器、听觉中枢来传递声波。不需要通过耳道&#xff0c;是一种耳挂式的无线耳机。 骨传导耳机与普通耳机相比&#xff0c;最大的优势是不需要入耳&am…

VasDolly实现多渠道打包

目录 一、添加对VasDolly Plugin的依赖 二、 引用VasDolly Plugin 三、添加对VasDolly helper类库的依赖 四、根目录新建文件添加渠道列表 五、主App工程的build.gradle中配置channel 六、根据已有基础包重新生成多渠道包 官方地址&#xff1a; GitHub - Tencent/VasDol…

【21】linux进阶——grep命令搜索查找

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…

【1048. 最长字符串链】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给出一个单词数组 words &#xff0c;其中每个单词都由小写英文字母组成。 如果我们可以 不改变其他字符的顺序 &#xff0c;在 wordA 的任何地方添加 恰好一个 字母使其变成 wordB &#xff0c;那么…

【AI】Python 安装时启用长路径支持

文章目录 场景&#xff1a;解释&#xff1a;关于文件长路径&#xff1a;计算方法&#xff1a; 场景&#xff1a; Python 安装时&#xff0c;会出现 Disable path length limit 的提示。 解释&#xff1a; 在 Windows 操作系统中&#xff0c;文件路径的长度是有限制的。在早期…

连续Hopfield神经网络的优化——旅行商问题优化计算

连续Hopfield神经网络 连续Hopfield神经网络&#xff08;Continuous Hopfield Network, CHN&#xff09;是一种基于能量最小化原理的神经网络模型&#xff0c;与离散Hopfield网络相比&#xff0c;它的状态是连续的&#xff0c;典型地采用实数值或者概率分布。在优化连续Hopfie…

各大外卖平台占据共享经济市场主要份额,占比近50%

哈喽大家好&#xff0c;随着大量互联网用户和移动支付的普及、大量用户通过共享平台将闲置资源和服务与需求方进行匹配&#xff0c;实现了资源的高效利用和消费者福利的提升。在全球化驱动的新型消费需求以及政策支持下&#xff0c;共享经济正在向更加成熟和规范化的方向发展。…