浙江万里学院第十届“真我风采”程序设计竞赛 问题 F: Excel单元格

本文主要是介绍浙江万里学院第十届“真我风采”程序设计竞赛 问题 F: Excel单元格,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

Excel是常用的办公软件,在2013版的Excel中,最大行数是1048576,最大列数是16384。给定单元格的名称就可以知道它在第几列第几行。 

例如,单元格名称是XFD1048576,表示第16384列,第1048576行。 

请根据输入的Excel单元格名称,计算出excel单元格在第几列第几行。 

输入

第一行输入一个正整数T(T≤100000) 

接下来有T组数据,每组数据有一个单元格地址,每组数据占一行。 

输出

根据每个单元格地址算出它的列数和行数,每个列数和行数占一行,中间用空格隔开。 

样例输入 

3
XFD1048576
A5
SK8

样例输出 

16384 1048576
1 5
505 8

思路:

       这题考察的是大家处理字符串的能力,一方面要将连在一起的列数和行数分开,另一方面,要将字符串形式的列数部分转换为数字形式,这个其实就是一个26进制转换的问题。

代码:

#include<stdio.h>
#include<ctype.h> 
#include<math.h>
char s[100],h[10],l[10];//定义3个数组,用来存单元格地址和行数部分和列数部分 
int main(){int t;//t组数据 scanf("%d",&t);//getchar();while(t--){scanf("%s",s);//读入单元格地址,存在s数组 int i = 0;int hi = 0;int li = 0;//1.取出列数部分存在h数组 while(isupper(s[i])){h[hi] = s[i];hi++;i++;}//2.取出行数部分存在l数组 while(isdigit(s[i])){l[li] = s[i];li++;i++;}l[li] = '\0';long long hs = 0;int qz = 0;//3.将列数部分转换为数字再输出,行数部分直接按输出即可 for(int j = hi-1; j >= 0; j--){hs+=(h[j]-'A'+1)*pow(26,qz++);}printf("%lld %s\n",hs,l);}return 0;
}

这道题但是大一的学弟们在做的时候,出现了一些让我都没想到的WA了的情况,那就是

1.正确:scanf("%d",&t);while(t--){scanf("%s",s);//读入单元格地址,存在s数组 }
2.WA:scanf("%d",&t);getchar();while(t--){gets(s);//读入单元格地址,存在s数组 }

这个我当时也没想到,我觉得这个应该是能过的,因为编译器上跑的出来,可是在OJ上显示是WA了的,然后我和技术组的同学好奇,就看了下学弟提交的代码和后台跑出来的结果,我们发现一个学弟的思路在做26进制转换的时候,直接是-64,这个思路也是对的,重要的是他这种方法跑出来的结果,第一组测试数据的结果是-64,接着每个结果都对应前一个测试数据,相当于第一次读入的时候没有读到第一组测试数据,按照学弟的思路和结果来看,第一次gets(s)读入的是ASCII码值为0(NULL)

我在网上找了下相关的信息,发现有人说:

gets()函数从流中读取字符串,直到出现换行符或读到文件尾为止,最后加上NULL作为字符串结束。所读取的字符串暂存在给定的参数string中。(来源于:https://blog.csdn.net/weixin_34013044/article/details/85838922)

所以我猜测是不是getchar()读了换行之后,gets()还是从那行末尾读,但是什么都没读到,所以只有一个NULL。

于是乎,我对代码进行了一个小小的修改:

修改后的代码:

#include<stdio.h>
#include<ctype.h> 
#include<math.h>
char s[100],h[10],l[10];//定义3个数组,用来存单元格地址和行数部分和列数部分 
int main(){int t;//t组数据 scanf("%d",&t);getchar();while(t--){if( gets(s) == NULL ){//读入单元格地址,存在s数组 t++; continue;}int i = 0;int hi = 0;int li = 0;//1.取出列数部分存在h数组 while(isupper(s[i])){h[hi] = s[i];hi++;i++;}//2.取出行数部分存在l数组 while(isdigit(s[i])){l[li] = s[i];li++;i++;}l[li] = '\0';long long hs = 0;int qz = 0;//3.将列数部分转换为数字再输出,行数部分直接按输出即可 for(int j = hi-1; j >= 0; j--){hs+=(h[j]-'A'+1)*pow(26,qz++);}printf("%lld %s\n",hs,l);}return 0;
}

或者可以将这块

        if( gets(s) == NULL ){//读入单元格地址,存在s数组 t++; continue;}

写成这样

        gets(s);if( s[0]=='\0' ){//读入单元格地址,存在s数组 t++; continue;}

总之只有避开gets()读到空的情况就好了,虽然gets()不是不能用,但是个人建议:如果没有要求读入带空格的话,scanf("%s",s)这么写更稳;

比赛结束后还有同学问我,说自己用的也是scanf(),为什么因也WA了,我没看到代码,根据自己经验,我觉得那个同学可能是把

scanf("%s",s);

写成了

scanf("%s",&s);

切记,这里s是数组,scanf读入字符串的话,写char数组的首地址就行了,s就是s[100]的首地址,不需要再加取地址符(&);

这里给大家安利几篇我找资料时候看的博客

c中gets函数使用可能导致缓冲区溢出(来源于:https://blog.csdn.net/weixin_34013044/article/details/85838922)

getchar的使用(来源于:https://blog.csdn.net/qq_30464257/article/details/80841574)

函数gets()的用法(来源于:https://blog.csdn.net/weixin_42512488/article/details/82831952)

有错误或侵权的地方,请留言。

这篇关于浙江万里学院第十届“真我风采”程序设计竞赛 问题 F: Excel单元格的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/533733

相关文章

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF