|
发表于 2017-1-21 13:38:05
|
显示全部楼层
本帖最后由 渡风 于 2017-1-21 13:43 编辑
此代码使用matlab编程
Problem22所用时间为0.89201秒
Problem22的答案为871198282
文本跟楼上的链接一样,哎,不能贴上文件
- %% 题目22:文件中所有英文总得分是多少
- %读取数据
- function Ouput=Problem22(Input)
- tic
- if nargin==0
- Input=importdata('Name.txt');
- end
- B=char(Input);
- C=strrep(B,'"','');%字符串替换,将"带替为’
- C=[',',C,','];
- Num=0;%逗号的数量,Num-1为名字的个数
- Set=[];
- for ii=1:length(C)
- if C(ii)==','
- Temp=[Set,ii];%将','的位置记录下来
- Set=Temp;
- Num=Num+1;
- end
- end
- Name{1,Num-1}=[];%记录字符串
- for jj=1:Num-1
- Name{jj}=C(Set(jj)+1:Set(jj+1)-1);%将字符串分类
- end
- %% 数据处理
- Name=sort(Name);%对名字进行排序
- Score=zeros(1,Num-1);
- for jj=1:Num-1
- Score(jj)=Letter_Score(Name{jj});
- end
- Result=Score.*(1:Num-1);
- Output=sum(Result);
- toc
- disp('此代码使用matlab编程')
- disp(['Problem22所用时间为',num2str(toc),'秒'])
- disp(['Problem22的答案为',num2str(Output)])
- end
- %% 子程序
- %输入一个字母字符串,得到其相应的分数,A得1,B得2...Z得26
- function Output=Letter_Score(Input)
- if nargin==0
- Input='ABCD';
- end
- lett={'a','b','c','d','e','f','g','h','i','j','k','l',...
- 'M','N','o','p','q','r','s','t','u','v','w','x','y','z'};%a-z
- Lett={'A','B','C','D','E','F','G','H','I','J','K','L',...
- 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};%A-Z
- Score=0;
- L=length(Input);
- for ii=1:L
- Temp=Input(ii);
- for jj=1:26
- if Temp==Lett{jj}||Temp==lett{jj}
- Score=Score+jj;
- end
- end
- end
- Output=Score;
- end
-
复制代码 |
|