程序员人生 网站导航

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

栏目:php教程时间:2015-05-20 10:40:58

题目链接:SDUT 2411 Pixel density

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

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

【代码以下】

#include <stdio.h> #include <string.h> #include <math.h> #define MAXN 100 + 10 #define N 1000 + 10 #define NES 1e⑹ char 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; //保存最后1个Inches的位置 if(getchar() == ' ') break; cnt++; } sscanf(s[flog⑴],"%lf",&Inch); sscanf(s[flog+1],"%lf*%lf",&Wp,&Hp); for(i = 0; i < flog⑴; 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 == 0 else 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(" "); } return 0; }

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

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



------分隔线----------------------------
------分隔线----------------------------

最新技术推荐