1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
#include<bits/stdc++.h> using namespace std; string sen,numbers[28]; bool words2s[7]; long words[7]={0},words2[7][2]={0},xcount=0,position,ccode[12]; char chr[20]; long long cans=0,answer=9999999999999; void deal() { for (int z=0;z<=11;z++) chr[z]=ccode[z]+48; sscanf(chr,"%lld",&cans); if (cans<answer) answer=cans; return; } void getcode(int step) { for (int i=0;i<=xcount;i++) { if (words2s[i]==0) { ccode[11-step*2]=words2[i][1]; ccode[10-step*2]=words2[i][0]; words2s[i]=1; if (step==xcount) deal(); getcode(step+1); words2s[i]=0; ccode[11-step*2]=0; ccode[10-step*2]=0; } } return; } int main() { //初始化全排列状态 for (int i=1;i<=6;i++) words2s[i]=true; for (int i=0;i<=11;i++) ccode[i]=0; //初始化查找表 numbers[1]="one "; numbers[2]="two "; numbers[3]="three "; numbers[4]="four "; numbers[5]="five "; numbers[6]="six "; numbers[7]="seven "; numbers[8]="eight "; numbers[9]="nine "; numbers[10]="ten "; numbers[11]="eleven "; numbers[12]="twelve "; numbers[13]="thirteen "; numbers[14]="fourteen "; numbers[15]="fifteen "; numbers[16]="sixteen "; numbers[17]="seventeen "; numbers[18]="eighteen "; numbers[19]="nineteen "; numbers[20]="twenty "; numbers[21]="a "; numbers[22]="both "; numbers[23]="another "; numbers[24]="first "; numbers[25]="second "; numbers[26]="third "; //清空+读入 sen.clear(); getline(cin,sen); //获取6个单词中的所有数字 for (int i=1;i<=26;i++) { position=0; while(sen.find(numbers[i],position)!=string::npos) { if(sen.find(numbers[i],position)==0 || sen[sen.find(numbers[i],position)-1]==32) { if (i<=20) words[xcount]=i; else switch (i) { case 21: words[xcount]=1; break; case 22: words[xcount]=2; break; case 23: words[xcount]=1; break; case 24: words[xcount]=1; break; case 25: words[xcount]=2; break; case 26: words[xcount]=3; break; } } xcount++; position=sen.find(numbers[i],position)+1; } } xcount-=1; //(第二步)把数字乘方后取后两位存入字符串 for (int i=0;i<=xcount;i++) { words[i]=pow(words[i],2); words2[i][0]=((words[i]%100)/10); words2[i][1]=((words[i]%100)%10); words2s[i]=false; } getcode(0); if (answer!=9999999999999) cout<<answer<<endl; else cout<<0; return 0; } |