程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 九度OJ 題目1029:魔咒詞典

九度OJ 題目1029:魔咒詞典

編輯:C++入門知識

 題目描述:     哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠調用任何一個需要的魔咒,所以他需要你的幫助。       給你一部魔咒詞典。當哈利聽到一個魔咒時,你的程序必須告訴他那個魔咒的功能;當哈利需要某個功能但不知道該用什麼魔咒時,你的程序要替他找到相應的魔咒。如果他要的魔咒不在詞典中,就輸出“what?” 輸入:     首先列出詞典中不超過100000條不同的魔咒詞條,每條格式為:       [魔咒] 對應功能       其中“魔咒”和“對應功能”分別為長度不超過20和80的字符串,字符串中保證不包含字符“[”和“]”,且“]”和後面的字符串之間有且僅有一個空格。詞典最後一行以“@END@”結束,這一行不屬於詞典中的詞條。     詞典之後的一行包含正整數N(<=1000),隨後是N個測試用例。每個測試用例占一行,或者給出“[魔咒]”,或者給出“對應功能”。   輸出:     每個測試用例的輸出占一行,輸出魔咒對應的功能,或者功能對應的魔咒。如果魔咒不在詞典中,就輸出“what?” 樣例輸入: [expelliarmus] the disarming charm [rictusempra] send a jet of silver light to hit the enemy [tarantallegra] control the movement of one's legs [serpensortia] shoot a snake out of the end of one's wand [lumos] light the wand [obliviate] the memory charm [expecto patronum] send a Patronus to the dementors [accio] the summoning charm @END@ 4 [lumos] the summoning charm [arha] take me to the sky樣例輸出: light the wand accio what? what?來源: 2008年浙江大學計算機及軟件工程研究生機試真題 [cpp]  /*********************************  *   日期:2013-2-18  *   作者:SJF0115  *   題號: 九度OJ 題目1029:魔咒詞典  *   來源:http://ac.jobdu.com/problem.php?pid=1029  *   結果:AC  *   來源:2008年浙江大學計算機及軟件工程研究生機試真題  *   總結:  **********************************/   #include<map>    #include<string>    #include<iostream>    #include<string.h>    #include <stdio.h>    using namespace std;       map<string,string> Map;      int Function(string str){        int len=str.length();        int i;        for(i = 0;i < len;i++)        {            if(str[i]==']')             {                break;            }        }        //魔咒         string s1 = str.substr(0,i+1);        //對應功能         string s2 = str.substr(i+2,len-i-2);        //存儲在Map中         Map[s1] = s2;        Map[s2] = s1;        return 0;   }       int main()   {       char s[105];       int n,i;       string str;       //輸入數據        while(gets(s)){           str = s;           if(str == "@END@")            {               break;           }           //分割魔咒及其對應功能            Function(str);       }       scanf("%d\n",&n);       for(i = 0;i < n;i++){           gets(s);           str = s;           //尋找魔咒或者對應功能            if(Map.find(str) == Map.end())           {               printf("what?\n");           }           else           {              str = Map[str];              //輸出對應的功能               if(str[0] != '[')              {                  cout<<str<<endl;              }              //輸出對應的魔咒               else              {                  cout<<str.substr(1,str.length()-2)<<endl;              }           }       }//for        return 0;   }     /********************************* *   日期:2013-2-18 *   作者:SJF0115 *   題號: 九度OJ 題目1029:魔咒詞典 *   來源:http://ac.jobdu.com/problem.php?pid=1029 *   結果:AC *   來源:2008年浙江大學計算機及軟件工程研究生機試真題 *   總結: **********************************/ #include<map> #include<string> #include<iostream> #include<string.h> #include <stdio.h> using namespace std;   map<string,string> Map;   int Function(string str){      int len=str.length(); int i;      for(i = 0;i < len;i++) { if(str[i]==']')  { break; } } //魔咒      string s1 = str.substr(0,i+1); //對應功能      string s2 = str.substr(i+2,len-i-2); //存儲在Map中      Map[s1] = s2;      Map[s2] = s1; return 0; }   int main() {     char s[105]; int n,i;     string str; //輸入數據     while(gets(s)){         str = s;         if(str == "@END@")  { break; } //分割魔咒及其對應功能         Function(str);     }     scanf("%d\n",&n);     for(i = 0;i < n;i++){         gets(s); str = s; //尋找魔咒或者對應功能         if(Map.find(str) == Map.end()) { printf("what?\n"); }         else {            str = Map[str];   //輸出對應的功能            if(str[0] != '[')   {   cout<<str<<endl;   }   //輸出對應的魔咒            else   {   cout<<str.substr(1,str.length()-2)<<endl;   }         }     }//for return 0; }轉載 [cpp] #include <stdio.h>    #include <string.h>    #include <stdlib.h>        struct dic   {     char wo[22];     char ex[82];   }a[10000],b[10000];       int cmp1(const void *a,const void *b)   {    return strcmp((*(struct dic *)a).wo,(*(struct dic *)b).wo);   }       int cmp2(const void *a,const void *b)   {    return strcmp((*(struct dic *)a).ex,(*(struct dic *)b).ex);   }       int main()   {     int i,k;     int n,high,low,mid,tmp,ans;     char s[104],c[82];     k=0;       while(gets(s)&&strcmp(s,"@END@"))       {         int j=0;         i=1;         while(s[i]!=']')         {           a[k].wo[j]=s[i];           b[k].wo[j]=s[i];           j++;           i++;         }           a[k].wo[j+1]='\0';           b[k].wo[j+1]='\0';             if(s[i]==']') i+=2;          j=0;         while(s[i]!='\0')         {           a[k].ex[j]=s[i];           b[k].ex[j]=s[i];           j++;           i++;         }         a[k].ex[j+1]='\0';         b[k].ex[j+1]='\0';         k++;       }       qsort(a,k,sizeof(a[0]),cmp1);       qsort(b,k,sizeof(b[0]),cmp2);       scanf("%d",&n);       getchar();       while(n--)       {        gets(c);        ans=-1;        low=0;high=k-1;        if(c[0]=='[')        {            int len;            len=strlen(c);            for(i=0;i<len-2;i++)             c[i]=c[i+1];            c[i]='\0';            while(low<=high)           {             mid=(low+high)/2;             tmp=strcmp(c,a[mid].wo);             if (tmp==0) {ans=mid;break;}               else if(tmp>0) low=mid+1;                 else high=mid-1;           }           if(ans==-1) printf("what?\n");             else printf("%s\n",a[ans].ex);        }        else        {                while(low<=high)           {             mid=(low+high)/2;             tmp=strcmp(c,b[mid].ex);             if (tmp==0) {ans=mid;break;}               else if(tmp>0) low=mid+1;                 else high=mid-1;           }           if(ans==-1) printf("what?\n");             else printf("%s\n",b[ans].wo);        }                 }   return 0;   }         #include <stdio.h> #include <string.h> #include <stdlib.h>   struct dic {   char wo[22];   char ex[82]; }a[10000],b[10000];   int cmp1(const void *a,const void *b) {  return strcmp((*(struct dic *)a).wo,(*(struct dic *)b).wo); }   int cmp2(const void *a,const void *b) {  return strcmp((*(struct dic *)a).ex,(*(struct dic *)b).ex); }   int main() {   int i,k;   int n,high,low,mid,tmp,ans;   char s[104],c[82];   k=0;     while(gets(s)&&strcmp(s,"@END@"))     {       int j=0;       i=1;       while(s[i]!=']')       {         a[k].wo[j]=s[i];         b[k].wo[j]=s[i];         j++;         i++;       }         a[k].wo[j+1]='\0';         b[k].wo[j+1]='\0';         if(s[i]==']') i+=2;        j=0;       while(s[i]!='\0')       {         a[k].ex[j]=s[i];         b[k].ex[j]=s[i];         j++;         i++;       }       a[k].ex[j+1]='\0';       b[k].ex[j+1]='\0';       k++;     }     qsort(a,k,sizeof(a[0]),cmp1);     qsort(b,k,sizeof(b[0]),cmp2);     scanf("%d",&n);     getchar();     while(n--)     {      gets(c);      ans=-1;      low=0;high=k-1;      if(c[0]=='[')      {          int len;          len=strlen(c);          for(i=0;i<len-2;i++)           c[i]=c[i+1];          c[i]='\0';          while(low<=high)         {           mid=(low+high)/2;           tmp=strcmp(c,a[mid].wo);           if (tmp==0) {ans=mid;break;}             else if(tmp>0) low=mid+1;               else high=mid-1;         }         if(ans==-1) printf("what?\n");           else printf("%s\n",a[ans].ex);      }      else      {            while(low<=high)         {           mid=(low+high)/2;           tmp=strcmp(c,b[mid].ex);           if (tmp==0) {ans=mid;break;}             else if(tmp>0) low=mid+1;               else high=mid-1;         }         if(ans==-1) printf("what?\n");           else printf("%s\n",b[ans].wo);      }         } return 0; }     #include<stdio.h>    #include<string.h>    #include<stdlib.h>       typedef struct Str{       char name[22];//魔咒        char function[82];//對應功能    }Str;      Str str[10001];      int main() {       int n,i,j,index = 0,flag,start,k;       char s[104];       //char command[104];        while (gets(s)){           //詞典最後一行以“@END@”結束,這一行不屬於詞典中的詞條            if(s[0] == '@'){               break;           }           else{               //輸入魔咒                for(i = 0;s[i] != ']';i++){                   str[index].name[i] = s[i];               }               str[index].name[i++] = ']';               str[index].name[i] = '\0';               //輸入對應功能                start = i+1;               for(i = start,k = 0;s[i] != '\n';k++,i++){                   str[index].function[k] = s[i];               }               str[index].function[k] = '\0';           }           index++;       }//while        scanf("%d\n",&n);       for(i = 0;i < n;i++){           gets(s);           flag = 0;           //輸入的是魔咒輸出對應功能            if(s[0] == '['){               for(j = 0;j < index;j++){                   //找到魔咒對應的功能                    if(strcmp(s,str[j].name) == 0){                       flag = 1;                       //輸出對應的功能                        printf("%s\n",str[j].function);                       break;                   }               }           }           //輸入的是魔咒的功能輸出魔咒            else{               for(j = 0;j < index;j++){                   //找到對應的魔咒                    if(strcmp(s,str[j].function) == 0){                       flag = 1;                       //輸出對應的魔咒                        for(k = 1;str[j].name[k] != ']';k++){                           printf("%c",str[j].name[k]);                       }                       printf("\n");                       break;                   }               }           }           //沒有找到            if(flag == 0){               printf("what?\n");           }       }       return 0;   }     #include<stdio.h> #include<string.h> #include<stdlib.h>   typedef struct Str{ char name[22];//魔咒 char function[82];//對應功能 }Str;   Str str[10001];   int main() { int n,i,j,index = 0,flag,start,k; char s[104]; //char command[104];     while (gets(s)){ //詞典最後一行以“@END@”結束,這一行不屬於詞典中的詞條 if(s[0] == '@'){ break; } else{ //輸入魔咒 for(i = 0;s[i] != ']';i++){ str[index].name[i] = s[i]; } str[index].name[i++] = ']'; str[index].name[i] = '\0'; //輸入對應功能 start = i+1; for(i = start,k = 0;s[i] != '\n';k++,i++){ str[index].function[k] = s[i]; } str[index].function[k] = '\0'; } index++;     }//while scanf("%d\n",&n); for(i = 0;i < n;i++){ gets(s); flag = 0; //輸入的是魔咒輸出對應功能 if(s[0] == '['){ for(j = 0;j < index;j++){ //找到魔咒對應的功能 if(strcmp(s,str[j].name) == 0){ flag = 1; //輸出對應的功能 printf("%s\n",str[j].function); break; } } } //輸入的是魔咒的功能輸出魔咒 else{ for(j = 0;j < index;j++){ //找到對應的魔咒 if(strcmp(s,str[j].function) == 0){ flag = 1; //輸出對應的魔咒 for(k = 1;str[j].name[k] != ']';k++){ printf("%c",str[j].name[k]); } printf("\n"); break; } } } //沒有找到 if(flag == 0){ printf("what?\n"); } }     return 0; }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved