Форум » Обработка числовых последовательностей » C4 из последней тренировочной » Ответить

C4 из последней тренировочной

Бибиков: Программа, к сожалению с первого раза не заработала, поэтому есть немного мусора. Проверьте, пожалуйста, ее правильность. Заранее спасибо. [quote]const q=1; z=26; var s:string; c,y:char; p,i,x,c2:integer; A:array[q..z] of integer; B:array[q..z] of char; begin readln(s); while s<>'*' do begin p:=pos(' ',s); while p<>0 do begin if p<>1 then begin c:=s[1]; c2:=ord(c); c2:=c2-96; A[c2]:=A[c2]+1; B[c2]:=c; end; delete(s,1,p); p:=pos(' ',s) end; c:=s[1]; if c<>' ' then begin c2:=ord(c); c2:=c2-96; A[c2]:=A[c2]+1; B[c2]:=c; end; readln(s); end; for i:=q to z do for p:=q to z-i do if A[p]<A[p+1] then begin x:=A[p]; y:=B[p]; A[p]:=A[p+1]; B[p]:=B[p+1]; A[p+1]:=x; B[p+1]:=y; end; for c2:=q to z do if A[c2]<>0 then writeln(B[c2],' ',A[c2]); end.[/quote]

Ответов - 3

Бибиков: Суть такова: Считываются строки до ввода *. Затем находим пробелы до тех пор, пока их не останется вовсе. Удаляем из строки все до пробела и находим первую букву слова, Затем с помощью пузырька все это сортируем. **Алгоритм немного сложнее, но суть все же такова(учтены варианты с пробелами в начале и конце строки)

BaVictor: За что мне нравится с#, так за простоту сортировки введенных данных Собственно соль while ((line = Console.ReadLine()) != "*") { //удаляем лишние пробелы и заносим каждое слово в массив string[] words = line.Split(' '); for (int n = 0; n < words.Length; n++) { //увеличиваем счетчик буквы, с которой начинается слово на 1 if(words[n]!="") counts[letters.IndexOf(words[n][0])]++; } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C4_mioo1805 { class Program { static void Main(string[] args) { //Объявляем массив букв и заполняем его List<char> letters = new List<char>(26); for (char ch = 'a'; ch <= 'z'; ch++) { letters.Add(ch); } //массив количества слов, начинающихся с определенной буквы List<int> counts = new List<int>(26); for (int n = 0; n < 26; n++) { counts.Add(0); } string line; //читаем введенную строчку до тех пор, пока не будет введена звездочка while ((line = Console.ReadLine()) != "*") { //удаляем лишние пробелы и заносим каждое слово в массив string[] words = line.Split(' '); for (int n = 0; n < words.Length; n++) { //увеличиваем счетчик буквы, с которой начинается слово на 1 if(words[n]!="") counts[letters.IndexOf(words[n][0])]++; } } //находим максимальное количество слов с определенной буквы int max = 0; for (int n = 0; n < counts.Count; n++) { if (counts[n] > max) max = counts[n]; } //выводим по убыванию for (int n = max; n >= 1; n--) { for (int i = 0; i < counts.Count; i++) { if (counts == n) Console.WriteLine(letters + " " + counts); } } Console.Read(); } } }

oval: Программа, к сожалению с первого раза не заработала, поэтому есть немного мусора. Проверьте, пожалуйста, ее правильность. решение правильное можно немного сократить ввод, обратите внимание на жирную строчку, она заставляет цикл, обработать последнее слово [pre2]TYPE bc=record b:char; c:integer; end; var p,i,j,k:integer; s, s1:string; a:array [1..26] of bc; temp:bc; Begin for i:=1 to 26 do a.c:=0; while s<>'*' do begin readln(s); p:=POS(' ',s); while p<>0 do begin s1:=copy(s,1,p-1); if s1<> '' then begin k:= ord(s1[1])-ord('a')+1; a[k].b:=s1[1]; a[k].c:=a[k].c+1; end; DELETE(s,1,p); p:=POS(' ',s); if (s<>'') and (p = 0) then p:= length(s)+1; end; end; for i:=1 to 25 do for j:=1 to 26-i do if a[j].c<a[j+1].c then begin temp:=a[j]; a[j]:=a[j+1]; a[j+1]:=temp; end; for i:=1 to 26 do if a.c <>0 then writeln(a.b,' ', a.c); end. [/pre2]




полная версия страницы