微軟程式設計之美的資格賽,這麼簡單的題目害我編了一個多小時——傳話遊戲
微軟程式設計之美的資格賽,這麼簡單的題目害我編了一個多小時,看來還得多聯絡啊!20分到手!放程式碼:
傳話遊戲
時間限制: 1000ms 記憶體限制: 256MB
描述
Alice和Bob還有其他幾位好朋友在一起玩傳話遊戲。這個遊戲是這樣進行的:首先,所有遊戲者按順序站成一排,Alice站第一位,Bob站最後一位。然後,Alice想一句話悄悄告訴第二位遊戲者,第二位遊戲者又悄悄地告訴第三位,第三位又告訴第四位……以此類推,直到倒數第二位告訴Bob。兩位遊戲者在傳話中,不能讓其他人聽到,也不能使用肢體動作來解釋。最後,Bob把他所聽到的話告訴大家,Alice也把她原本所想的話告訴大家。
由於傳話過程中可能出現一些偏差,遊戲者越多,Bob最後聽到的話就與Alice所想的越不同。Bob聽到的話往往會變成一些很搞笑的東西,所以大家玩得樂此不疲。經過幾輪遊戲後,Alice注意到在兩人傳話中,有些詞彙往往會錯誤地變成其他特定的詞彙。Alice已經收集到了這樣的一個詞彙轉化的列表,她想知道她的話傳到Bob時會變成什麼樣子,請你寫個程式來幫助她。
輸入
輸入包括多組資料。第一行是整數 T,表示有多少組測試資料。每組資料第一行包括兩個整數 N 和 M,分別表示遊戲者的數量和單詞轉化列表長度。隨後有 M 行,每行包含兩個用空格隔開的單詞 a 和 b,表示單詞 a 在傳話中一定會變成 b。輸入資料保證沒有重複的 a。最後一行包含若干個用單個空格隔開的單詞,表示Alice所想的句子,句子總長不超過100個字元。所有單詞都只包含小寫字母,並且長度不超過20,同一個單詞的不同時態被認為是不同的單詞。你可以假定不在列表中的單詞永遠不會變化。
輸出
對於每組測試資料,單獨輸出一行“Case #c: s”。其中,c 為測試資料編號,s 為Bob所聽到的句子。s 的格式與輸入資料中Alice所想的句子格式相同。
資料範圍
1 ≤ T ≤ 100
小資料:2 ≤ N ≤ 10, 0 ≤ M ≤ 10
大資料:2 ≤ N ≤ 100, 0 ≤ M ≤ 100
- 樣例輸入
-
2 4 3 ship sheep sinking thinking thinking sinking the ship is sinking 10 5 tidy tiny tiger liar tired tire tire bear liar bear a tidy tiger is tired
- 樣例輸出
-
Case #1: the sheep is thinking Case #2: a tiny bear is bear
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char aa[110][110];
char bb[110][110];
char senten[110][110];
char input[110];
int count;
void divide()
{
count=0;
char temp[110];
memset(temp,'\0',sizeof(temp));
int tempc=0;
for(int i=0;i<strlen(input);i++)
{
if(input[i]==' ')
{
//printf("temp:%s\n",temp);
for(int j=0;j<strlen(temp);j++)
senten[count][j]=temp[j];
//printf("senten:%s\n",senten[count]);
count++;
tempc=0;
memset(temp,'\0',sizeof(temp));
continue;
}
temp[tempc++]=input[i];
}
//printf("count:%d\n",count);
}
void exchange(int m)
{
for(int i=0;i<count;i++)
{
for(int j=0;j<m;j++)
if(strcmp(senten[i],aa[j])==0)
{
//printf("sen:%s,bb:%s\n",senten[i],bb[j]);
strcpy(senten[i],bb[j]);
break;
}
}
}
void print()
{
for(int ll=0;ll<count;ll++)
{
if(ll==0) printf("%s",senten[ll]);
else printf(" %s",senten[ll]);
}
printf("\n");
}
void print2()
{
for(int ll=0;ll<count;ll++)
{
printf("%s\n",senten[ll]);
}
printf("\n");
}
int main()
{
freopen("data.in","r",stdin);
int num;
scanf("%d",&num);
for(int l=0;l<num;l++)
{
memset(aa,'\0',sizeof(aa));
memset(bb,'\0',sizeof(bb));
memset(senten,'\0',sizeof(senten));
memset(input,'\0',sizeof(input));
int n,m;///分別表示遊戲者的數量和單詞轉化列表長度。隨後有 M 行
scanf("%d%d",&n,&m);
for(int ll=0;ll<m;ll++)
{
scanf("%s%s",aa[ll],bb[ll]);
}
getchar();
//for(int ll=0;ll<m;ll++)
//printf("a:%s b:%s\n",aa[ll],bb[ll]);
gets(input);
input[strlen(input)]=' ';
//printf("%s\n",input);
divide();
//printf("after divide:");
//print();
for(int ll=0;ll<n-1;ll++)
{
exchange(m);
//printf("ll:%d\n",ll);
//print2();
}
printf("Case #%d: ",l+1);
print();
}
//printf("time used:%f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}