SDUT 2411 Pixel density(模擬,字符串)
來源:程序員人生 發布時間:2015-05-20 10:40:58 閱讀次數:3480次
題目鏈接: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起探討。
(如有毛病,歡迎指正,轉載請注明出處)
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈