SDUT 2411 Pixel density(模拟,字符串)

题目链接:SDUT 2411 Pixel density

这一题,可以说题目略坑。为什么呢,第一就是他题意描述过于模糊,第二题输出格式有点坑(说到底还是题意不要表述清晰)。现在我们来看看这一题吧,这一题是 《2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛》 的题。本题可以说是一道着重于细节的一道题。对于细节没有把握清楚的话,就是WA。据说当时某些队伍就是因为细节没有把握好,结果硬是WA了26次(深表同情啊)。我们仔细观察题目的话,可以发现 他给我们的格式是 “名称 + 屏幕大小(以英寸为单位)+ inches + 屏幕规格(Wp*Hp) + 类型”。其中加号的位置可以有若干个空格,当然在名称和类型中也可以有若干个空格。最后输出的时候,字符串之间只能有一个空格,类型必须转化为小写,最后一行不能有换行符。还有一个坑,,就是当Inch为0的情况,这是你就要另外处理。题目想说的大概就是这样。

这一题我的解法是这样的: 首先,我先建立一个二维数组,将输入的字符串,看成若干个不包含空格的字符串。然后找到最后一个 inches 并将其的位置记录下来。这样的话,它前一个字符串自然就是屏幕的大小了,后一个字符串就是规格了。这样我们就可以将原先一大串的字符串,分开处理了。那我们以什么来判断结尾呢?仔细研究一下题目,发现它对每一个样例就只有一行,那么我们就可以用 ’\n‘来判断输入结束了。下面附上代码,供大家辅助理解我想表达的意思。

【代码如下】

#include <stdio.h>#include <string.h>#include <math.h>#define MAXN 100 + 10#define N 1000 + 10#define NES 1e-6char s[N][MAXN];int T, flog, cnt;char szName[MAXN],szType[MAXN],Outstr[3*MAXN]; //不用太纠结我为什么是3*MAXN,只要让他的值大于2*MAXN就好了double PPI(double Inch, double Wp, double Hp){return sqrt( Wp * Wp + Hp * Hp ) / Inch;}void Change(char *str){int len = strlen(str);for(int i = 0; i < len; i++){if(str[i]>='A'&&str[i]<='Z')str[i] += 32;}return ;}void Init(){flog = cnt = 0;memset(szName,0,sizeof(szName));memset(szType,0,sizeof(szType));}int main(){int i, p, k = 0;double Inch, Wp, Hp, ans;scanf("%d",&T);getchar();while(T–){Init();while(scanf("%s",s[cnt])){if(!strcmp(s[cnt],"inches")) flog = cnt; //保存最后一个Inches的位置if(getchar() == '\n') break;cnt++;}sscanf(s[flog-1],"%lf",&Inch);sscanf(s[flog+1],"%lf*%lf",&Wp,&Hp);for(i = 0; i < flog-1; i++){if(i) strcat(szName," ");strcat(szName,s[i]);}for(i = flog+2, p = 0; i <= cnt; p++, i++){if(p) strcat(szType," ");strcat(szType,s[i]);}Change(szType);if(fabs(Inch) < NES) ans = 0.00; //因为存在浮点数误差所以不能直接写成 Inch == 0else ans = PPI(Inch,Wp,Hp);sprintf(Outstr,"Case %d: The %s of %s's PPI is %.2lf.",++k,szType,szName,ans);printf("%s",Outstr);if(T) printf("\n");}return 0;}

这一题虽然AC了,但是我还是有一些疑问。题意既然没有说 类型 一定是大写的,那么就有小写的存在,既然有小写的存在那么在类型中不能有inches呢。嗨,说到底这一题题意过于朦胧,让人琢磨不清。还有人使用屏幕尺寸前的两个空格进行判断,也是能够AC。现在想想估计也能明白,但是为什么会有人WA了26次。估计就是考虑了,太多了。如果大家还有什么其他的看法,欢迎一起探讨。

(如有错误,欢迎指正,转载请注明出处)





何不去远方!昆明呀——赶一个花海;

SDUT 2411 Pixel density(模拟,字符串)

相关文章:

你感兴趣的文章:

标签云: