題意:
在威斯康辛州牛大農場經營者之中,都習慣於請會計部門用連續數字給母牛打上烙印。但是,母牛本身並沒感到這個系統的便利,它們更喜歡用它們喜歡的名字來呼叫它們的同伴,而不是用像這個的語句"C'mon, #4734, get along."。請寫一個程序來幫助可憐的牧牛工將一只母牛的烙印編號翻譯成一個可能的名字。因為母牛們現在都有手機了,使用那標准的按鍵的排布來把將數目翻譯為文字:( 除了 "Q" 和 "Z")
2: A,B,C 5: J,K,L 8: T,U,V
3: D,E,F 6: M,N,O 9: W,X,Y
4: G,H,I 7: P,R,S
可接受的名字都被放在這樣一個叫作"dict.txt" 的文件中,它包含一連串的少於 5,000個(准確地說是4617個)可被接受的牛的名字。 (所有的名字都是大寫的且已按字典序排列) 請讀入母牛的編號並返回那些能從編號翻譯出來並且在字典中的名字。舉例來說,編號 4734 能產生的下列各項名字: GPDG GPDH GPDI GPEG GPEH GPEI GPFG GPFH GPFI GRDG GRDH GRDI GREG GREH GREI GRFG GRFH GRFI GSDG GSDH GSDI GSEG GSEH GSEI GSFG GSFH GSFI HPDG HPDH HPDI HPEG HPEH HPEI HPFG HPFH HPFI HRDG HRDH HRDI HREG HREH HREI HRFG HRFH HRFI HSDG HSDH HSDI HSEG HSEH HSEI HSFG HSFH HSFI IPDG IPDH IPDI IPEG IPEH IPEI IPFG IPFH IPFI IRDG IRDH IRDI IREG IREH IREI IRFG IRFH IRFI ISDG ISDH ISDI ISEG ISEH ISEI ISFG ISFH ISFI
碰巧,81個中只有一個"GREG"是有效的(在字典中)。
寫一個程序來對給出的編號打印出所有的有效名字,如果沒有則輸出NONE。編號可能有12位數字。
題解:先從哪個文件中輸入dict,存起來,然後輸入數字後從頭到尾判斷一下
代碼:
[cpp]
/*
ID: lishicao
PROG: namenum
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std ;
ifstream fin ( "dict.txt" ) ;
ifstream in ( "namenum.in" ) ;
ofstream fout ( "namenum.out" ) ;
int Count ;
char dict[5005][20] ;
int function[26] = { 2 , 2 , 2 , 3 , 3 , 3 , 4 , 4 , 4 , 5 , 5 , 5 , 6 , 6 , 6 , 7 , 0 , 7 , 7 , 8 , 8 , 8 , 9 , 9 , 9 , 0 } ;
int main()
{
char num[20] ;
bool flag = 0 ;
Count = 0 ;
while( fin >> dict[Count] )
Count ++ ;
in >> num ;
for( int i = 0 ; i < Count ; i ++ )
{
int FLAG = 0 ;
if( strlen( num ) != strlen( dict[i] ) ) continue ;
for( int j = 0 ; j < strlen( dict[i] ) ; j ++ )
{ www.2cto.com
if( function[dict[i][j] - 'A'] == num[j] - '0' ) continue ;
else {
FLAG = 1 ;
break ;
}
}
if( !FLAG )
{
flag = 1 ;
fout << dict[i] << endl ;
}
}
if( !flag ) fout << "NONE" << endl ;
return 0 ;
}