24h購物| | PChome| 登入
2009-04-23 20:11:15| 人氣527| 回應3 | 上一篇 | 下一篇

ACM 11530 11530 - SMS Typing

推薦 0 收藏 0 轉貼0 訂閱站台

/*************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int number[26]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
char x[102];
main()
{
 int n,a,b;
 
 while(scanf("%d ",&n)==1)
 for(a=1;a<=n;a++)
  {
   gets(x);
   printf("Case #%d:",a);
   int ans=0,m=strlen(x);
   for(b=0;b<m;b++)
    if(x[b]==' ') ans++;
    else ans+=number[x[b]-'a'];
    printf(" %d\n",ans);
  }
 return 0;
}

台長: 來源不明
人氣(527) | 回應(3)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 11526 11526 - H(n)
此分類上一篇:ACM 11342 11342 - Three-square

billy
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{



int temp[26] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
int a,b,m,n;
int total;
char s1[101];

while(scanf(”%d”,&n) == 1)
{

for(a=1 ; a<=n ; a++)
{ gets(s1);


m = strlen(s1);
total = 0;

for(b=0 ; b<m ; b++)
{ if( ’a’ <= s1[b] <= ’z’ )
total = total + temp[s1[b] - ’a’];

else
total++;
}

printf(”Case #%d: %d\n”,a,total);

}



}


return 0;
}
2009-05-31 18:49:03
billy
請問一下大大

這是我的程式碼 可是不知道為什麼錯了

我用debug 它會直接跳過gets程式碼

能請問為什麼嗎??

抱歉 因為留言版的格子有點小 所以上傳上去得程式碼有點亂 >>
2009-05-31 18:52:25
版主回應
沒關係 我大致上瞭解你的問題
首先要先了解scanf 跟 gets的差異
當我們輸入數字 交給scanf 去分析 他只會分析到不是數字的尾端
然而’\0’這個跳逸字元還是’\n’ 反正有一個 就會跑到下一行去
而gets 好死不死又讀到這個東西當作是一筆資料!!
所以要解決scanf跟gets混用的情況
三種解決辦法
1.scanf(”%d ”,&n); scanf多一個空格
2.scanf(”%d”,&n); scanf(” ”); 多一個scanf
3.scanf(”%d”,&n); getchar(); 利用getchar 把多餘的字元讀掉
之後直接接上gets 就OK了
2009-05-31 19:18:36
billy
真的耶~ 我在scanf後加一個空個格就跑的動了~

不過可以請大大再解釋一下嗎?

我還是不太懂為什麼上面的scanf會影響到下面的gets?
2009-06-01 22:49:45
版主回應
你叫我怎麼回答啊...
我沒那麼聰明 這都是我拚命測試出來的
不過我想...scanf 是分析所想要的東西...
然而終止條件就是把東西讀完,就跳開
像是scanf(”%s”,x); 當我們輸入陣列時
結束輸入 會再陣列後面補一個\0 但是我們卻不會發現這個東西
不過這東西是存在的
然而跟gets 的分析方式有點卡住吧(可能是讀到換行 算是一個END)
結果讀到\0 \n = =
以上都是猜想...
我的猜測
2009-06-04 22:18:47
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文