Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=10613350&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 13:30:56 2016
Кодировка: Windows-1251
Задачка про буквы, слоги и слова - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
General Discussion >> Study (Archive)

Страницы: 1
Owen
как взрослый

Рег.: 01.05.2005
Сообщений: 10057
Рейтинг: 21234
  Задачка про буквы, слоги и слова
      03.12.2011 23:19
 

Восстановите все буквы в предложении
'Это предложение содержит ___ слов(?), ___ ___ слог(?) и ____ ____ букв(?)'
Вопросительные знаки в скобках означают одно из возможных окончаний.

Sevurrrra
Хранитель маяка

Рег.: 10.09.2007
Сообщений: 2051
Рейтинг: 2759
  Re: Задачка про буквы, слоги и слова [re: Owen]
      04.12.2011 00:26
 

В ответ на:

Это предложение содержит ___ слов(?), ___ ___ слог(?) и ____ ____ букв(?)



Это предложение содержит двенадцать слов, двадцать шесть слогов и шестьдесят две буквы.

В чем проблема?

Owen
как взрослый

Рег.: 01.05.2005
Сообщений: 10057
Рейтинг: 21234
  Re: Задачка про буквы, слоги и слова [re: Sevurrrra]
      04.12.2011 11:27
1

Quote:

Это предложение содержит двенадцать слов, двадцать шесть слогов и шестьдесят две буквы.

В чем проблема?



Ну, например, в том, что в твоем предложении 74 буквы. Предложение, конечно, должно верно себя описывать.

bulat
D

Рег.: 20.09.2008
Сообщений: 122
Рейтинг: 114
  Re: Задачка про буквы, слоги и слова [re: Owen]
      04.12.2011 13:20
 

В ответ на:

Предложение, конечно, должно верно себя описывать.



Это предложение содержит двенадцать слов, двадцать шесть слогов и семьдесят три буквы.

з.ы. по исходному запросу в гугле по второй ссылке виден ответ, даже не заходя никуда дальше.

ismolnik
Денис.

Рег.: 05.12.2006
Сообщений: 22031
Из: окрестности ГЗ
Рейтинг: 8426
  Re: Задачка про буквы, слоги и слова [re: bulat]
      04.12.2011 14:39
 

Почему не считается знак препинания?



Owen
как взрослый

Рег.: 01.05.2005
Сообщений: 10057
Рейтинг: 21234
  Re: Задачка про буквы, слоги и слова [re: bulat]
      04.12.2011 15:58
2

Как много способов решить задачу, не решая задачу!..

bulat
D

Рег.: 20.09.2008
Сообщений: 122
Рейтинг: 114
  Re: Задачка про буквы, слоги и слова [re: Owen]
      04.12.2011 16:22
2

В ответ на:

Как много способов решить задачу, не решая задачу!..



Я ее решил, а потом посмотрел гугл.

Кто решил, что я посмотрел гугл и списал - неправы.

 
В ответ на:

Почему не считается знак препинания?



Знак препинания - это слово, слог или буква?

_Ss_

Рег.: 21.11.2003
Сообщений: 4145
Рейтинг: 4662
  Re: Задачка про буквы, слоги и слова [re: Owen]
      04.12.2011 16:31
-1

Просто задача разряда "Найти простые числа-близнецы, меньшие 1000", решается только перебором.
Единственное, что можно сделать - это сократить перебор. Слов - 12, слогов не меньше, чем 16 + 3 (сорок два) * 2 и не больше, чем 16 + 7 (восемьдесят четыре) * 2 + 2 слогов (а значит там "двадцать" или "тридцать", а значит "двадцать", так как первая семерка из оценки становится 5),
не меньше, чем 65 + 3 + 5 + 3 = 76 и не больше, чем 65 + 6 + 11 + 6 + 4 = 92 буквы,
Итого, у нас "Это предложение содержит двенадцать слов, двадцать слог и букв"
значит у нас либо семьдесят+ (тогда кол-во букв 80+ - не подходит), либо восемьдесят+ букв, либо девяносто+(, тодга из не больше 90, тоже не подходит). То есть
"Это предложение содержит двенадцать слов, двадцать слог и восемьдесят букв" - 76(+2*3)+ букв, 23(+2)+ слога.
"Это предложение содержит двенадцать слов, двадцать слог(a,ов) и восемьдесят букв" 83+ букв, 26+ слогов.
"Это предложение содержит двенадцать слов, двадцать слогов и восемьдесят букв" 84+ букв, 26+ слогов. Значит пропущенные слова, не две и не три.
"Это предложение содержит двенадцать слов, двадцать слогов и восемьдесят букв" 86+ букв, 26+ слогов. Теперь уже можно перебрать.
Это предложение содержит двенадцать слов, двадцать семь слогов и восемьдесят восемь букв.
Буквы - все символы. Если только буквы (а-я), то тоже считатется.



Если сказанное мной может быть понято двояко, и первый
вариант тебя расстраивает, я имел ввиду второй
_Ss_

Рег.: 21.11.2003
Сообщений: 4145
Рейтинг: 4662
  Re: Задачка про буквы, слоги и слова [re: _Ss_]
      04.12.2011 21:44
-3

ИЧСХ, также подходит " Это предложение содержит двенадцать слов, двадцать шесть слогов и восемьдесят семь букв"



Если сказанное мной может быть понято двояко, и первый
вариант тебя расстраивает, я имел ввиду второй
Owen
как взрослый

Рег.: 01.05.2005
Сообщений: 10057
Рейтинг: 21234
  Re: Задачка про буквы, слоги и слова [re: _Ss_]
      04.12.2011 21:49
1

Quote:

ИЧСХ, также подходит " Это предложение содержит двенадцать слов, двадцать шесть слогов и восемьдесят семь букв"



:facepalm:
Понятию "буква" тебя в школе не научили, думаешь, length() буквы считает?
Там 75 букв.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: Задачка про буквы, слоги и слова [re: _Ss_]
      04.12.2011 22:29
5

Не,

using System;
using System.Linq;

namespace Numbers {
    class Program {
        static void Main(string[] args)
        {
            string[] words = { "слово", "слова", "слов" };
            string[] syllables = { "слог", "слога", "слогов" };
            string[] letters = { "буква", "буквы", "букв" };
            for( uint nwords = 1; nwords < 30; ++nwords ) {
                for( uint nsyllables = 1; nsyllables < 100; ++nsyllables ) {
                    for( uint nletters = 1; nletters < 140; ++nletters ) {
                        string sentence = "это предложение содержит " +
                            ConvertToString( nwords, 0, words, 0 ) + " " +
                            ConvertToString( nsyllables, 0, syllables, 1 ) +
                            " и " + ConvertToString( nletters, 0, letters, 2 );

                        /*Console.WriteLine( sentence );
                        Console.WriteLine( CountWords( sentence ) );
                        Console.WriteLine( CountSyllables( sentence ) );
                        Console.WriteLine( CountLetters( sentence ) );
                         */
                        if( CountWords( sentence ) == nwords &&
                            CountSyllables( sentence ) == nsyllables &&
                            CountLetters( sentence ) == nletters ) {
                            Console.WriteLine( sentence );
                        }
                    }
                }
            }
        }

        static uint CountWords(string x)
        {
            uint words = 0;
            char prev = ' ';
            foreach( char c in x ) {
                if( prev == ' ' && c != ' ' ) {
                    ++words;
                }

                prev = c;
            }

            return words;
        }

        static uint CountSyllables(string x)
        {
            uint syllables = 0;
            foreach( char c in x ) {
                if( "аяоеэеуюыи".Contains( c ) ) {
                    syllables++;
                }
            }

            return syllables;
        }

        static uint CountLetters(string x)
        {
            uint letters = 0;
            foreach( char c in x ) {
                if( c != ' ' ) {
                    ++letters;
                }
            }

            return letters;
        }

        static int Declension(int x)
        {
            if( x / 10 != 1 ) {
                if( x % 10 == 1 ) {
                    return 0;
                } else if( 1 <= x % 10 && x % 10 <= 4 ) {
                    return 1;
                }
            }

            return 2;
        }

        static string ConvertToString(ulong x, int exp, string[] parrots, int exc_index)
        {
            string[] digits = {
                                  "",
                                  "один ",
                                  "два ",
                                  "три ",
                                  "четыре ",
                                  "пять ",
                                  "шесть ",
                                  "семь ",
                                  "восемь ",
                                  "девять ",
                              "десять ",
                              "одиннадцать ",
                              "двенадцать ",
                              "тринадцать ",
                              "четырнадцать ",
                              "пятнадцать ",
                              "шестнадцать ",
                              "семнадцать ",
                              "восемнадцать ",
                              "девятнадцать "};

            string[,] digits_exceptions = {
                                             { "", "одно ", "два " }, // слово
                                             { "", "один ", "два " }, // слог
                                             { "", "одну ", "две " } // буквы, тысячи
                                         };

            string[] tens = {
                                "",
                                "",
                                "двадцать ",
                                "тридцать ",
                                "сорок ",
                                "пятьдесят ",
                                "шестьдесят ",
                                "семьдесят ",
                                "восемьдесят ",
                                "девяносто "
                            };

            string[] hundreds = {
                                    "",
                                    "сто ",
                                    "двести ",
                                    "триста ",
                                    "четыреста ",
                                    "пятьсот ",
                                    "шестьсот ",
                                    "семьсот ",
                                    "восемьсот ",
                                    "девятьсот "
                            };

            string[,] others = {
                                  {"ворона", "вороны", "ворон" },
                                  {"тысяча ", "тысячи ", "тысяч "},
                                  {"миллион ", "миллиона ", "миллионов "},
                                  {"миллиард ", "миллиарда ", "миллиардов "},
                                  {"триллион ", "триллиона ", "триллионов "},
                                  {"триллиард ", "триллиарда ", "триллиардов "}
                              };

            for( int i = 0; i < 3; i++ ) {
                others[0, i] = parrots[i];
            }

            if( x == 0 ) {
                if( exp == 0 ) {
                    return "ни одной " + others[0, 1];
                } else {
                    return "";
                }
            }

            int remainder = (int)(x % 1000);

            string higher = ConvertToString( x / 1000, exp + 1, parrots, exc_index );

            if( remainder == 0 && exp != 0 ) {
                return higher;
            }

            string result = hundreds[remainder / 100];
            result += tens[remainder % 100 / 10];
            if( (exp == 0 || exp == 1) && remainder % 10 < 3 && remainder / 10 % 10 != 1 ) {
                if( exp == 1 ) {
                    result += digits_exceptions[exc_index, remainder % 10 + (remainder / 10 % 10 == 1 ? 10 : 0)];
                } else {
                    result += digits_exceptions[2, remainder % 10 + (remainder / 10 % 10 == 1 ? 10 : 0)];
                }
            } else {
                result += digits[remainder % 10 + (remainder / 10 % 10 == 1 ? 10 : 0)];
            }
            result += others[exp, Declension( remainder % 100 )];

            return higher + result;
        }
    }
}


Прога не для этого случая писалась, так что допилил на коленке, осталось немного говнокода, сильно не пинайте. Выдает один из ответов в треде :grin:

_Ss_

Рег.: 21.11.2003
Сообщений: 4145
Рейтинг: 4662
  Re: Задачка про буквы, слоги и слова [re: Owen]
      04.12.2011 22:51
 

Я тебе русским по белому написал, что считал из предположения, буква = символ.
Так было мне проще. Посчитай уже сам с буквами.



Если сказанное мной может быть понято двояко, и первый
вариант тебя расстраивает, я имел ввиду второй
Vlad
addict

Рег.: 18.09.2004
Сообщений: 446
Рейтинг: 236
  Re: Задачка про буквы, слоги и слова [re: unkulunkulu]
      05.12.2011 21:33
 

Кстати, перебор для этой задачи не обязателен, можно так:

code:
static void Main(string[] args) { var s = ""; while (true) { var s2 = Describe(s); if (s == s2) { Console.WriteLine(s); break; } s = s2; } } static string Describe(string sentence) { return "это предложение содержит " + ConvertToString(CountWords(sentence), 0, words, 0) + " " + ConvertToString(CountSyllables(sentence), 0, syllables, 1) + " и " + ConvertToString(CountLetters(sentence), 0, letters, 2); } static string[] words = { "слово", "слова", "слов" }; static string[] syllables = { "слог", "слога", "слогов" }; static string[] letters = { "буква", "буквы", "букв" };


Разумеется, завершаемость не гарантируется, это зависит от начальных условий. Но на практике весьма вероятна!

Работает и в более сложных случаях, например, так можно построить предложение, описывающее частоты всех символов в нем.

Vlad
addict

Рег.: 18.09.2004
Сообщений: 446
Рейтинг: 236
  Re: Задачка про буквы, слоги и слова [re: Vlad]
      09.12.2011 15:27
5

В этом предложении тридцать одна буква "а", двадцать восемь букв "б", сорок шесть букв "в", тридцать пять букв "д", двадцать одна буква "е", две буквы "ж", десять букв "и", одна буква "й", двадцать девять букв "к", две буквы "л", шесть букв "м", одиннадцать букв "н", тринадцать букв "о", три буквы "п", девять букв "р", девять букв "с", двадцать семь букв "т", двадцать восемь букв "у", одна буква "ф", двенадцать букв "ц", две буквы "ч", три буквы "ш", одна буква "щ", девять букв "ы", двадцать четыре буквы "ь", две буквы "э" и семь букв "я".

Страницы: 1

General Discussion >> Study (Archive)

Дополнительная информация
1 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  Basilio, The_Nameless_One 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в