回 帖 发 新 帖 刷新版面

主题:请问,这两题怎么做?

1,读入一个英文句子,单词间用空格或逗号隔开,统计其中的单词个数,并输出各个字母出现的频率。(句子末尾不一定用“结束')

2,有一组数,其排列形式如下,11,19.9.12.5.20.1.18.4.16.6.10.15.2.17.3.14.7.13.8.且尾部8和头部11首尾相连,构成环形的一组数,编程找出相邻的4个数,其相加之和最大,并给出它们的起始位置.

谢谢@ @!
     

回复列表 (共19个回复)

沙发

+50分[em21]

板凳

+50分[em22]

3 楼

+50分[em23]

4 楼

+50分[em24]

5 楼

+50分[em24]

6 楼

[em31][em32][em33][em34][em35][em36][em37][em38][em39]

7 楼

var 
 str:string;
 rate:array['A'..'z']of real;
 word,len,i,letter:integer;
 ch:char;
begin
 readln(str);
 len:=length(str);
 fillchar(rate,sizeof(rate),0);
 word:=0;letter:=0;
 for i:=1 to len do 
  begin
   ch:=str[i];
   if ch in['a'..'z','A'..'Z'] 
     then begin
            a[ch]:=a[ch]+1;{累计个字母出现次数}
            letter:=letter+1 {累计字母总数}
          end
     else if ch=' ' then word:=word+1{累计单词总数}
  end;
  word:=word+1;{空格数比单词数少1,所以要加上1}
  for ch:='A' to 'z' do 
    begin
      rate[i]:=rate/word;{计算字母出现频率}
      witeln(rate[i]:0:3);
    end;

end.

8 楼

搞错,没看到单词可以用逗号格开
再发一次
var 
 str:string;
 rate:array['A'..'z']of real;
 word,len,i,letter:integer;
 ch:char;
begin
 readln(str);
 len:=length(str);
 fillchar(rate,sizeof(rate),0);
 word:=0;letter:=0;
 for i:=1 to len do 
  begin
   ch:=str[i];
   if ch in['a'..'z','A'..'Z'] 
     then begin
            a[ch]:=a[ch]+1;{累计个字母出现次数}
            letter:=letter+1 {累计字母总数}
          end
     else if (ch=' ')or(ch=',') then word:=word+1{累计单词总数}
  end;
  word:=word+1;{空格数比单词数少1,所以要加上1}
  for ch:='A' to 'z' do 
    begin
      rate[i]:=rate/word;{计算字母出现频率}
      witeln(rate[i]:0:3);
    end;

end.

9 楼

const
  a=array[0..19]of(11,19,9,12,5,20,1,18,4,16,6,10,15,2,17,3,14,7,13,8);
var 
  i,te,max,maxi:intger;
begin
  for i:=1 to 20 do
    begin
      te:=a[i]+a[(i+1) mod 19]+a[(i+2) mod 19]+a[(i+3) mod 19];
      if te>max then 
         begin
            maxi:=i;
            max:=te;
         end;
    end;
  writeln(max);
  writen(maxi+1);
end.

10 楼

没有测试过,你自己测试一下
 算法应该不回错,细节上不知道

我来回复

您尚未登录,请登录后再回复。点此登录或注册