Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сложнейшая задача на VC

17K
25 декабря 2006 года
vanyavl
23 / / 25.12.2006
Помогите пожалуйста с этими сложнейшими задачами:(
1. Дана символьная матрица размера n на m, в каждой строк которой имеется по крайней мере один из пробелов, за которым следует отличные от пробела символы. За щет изменения гркпп пробелов внутир строк нужно добиться того, что бы в конце каждой из строк пробелы отсуцтвовали. Количества пробелов в разных группах, распологающихся внутри одной и той же строки, должны различаться не более чем на единицу.

2 Получить все меньшие 1000000 натуральные числа, которые являются палнидромами как в десятичной так и в q-ичных системах. Необходимо создать функцию, перевода числа из десятичной в q-ичную систему счсления.
Примечание: Назовем натуральное число палиндромом, если его запись читается одинаково как сначала так и с конца(например 4554, 393, 1, ...).
17K
27 декабря 2006 года
vanyavl
23 / / 25.12.2006
Это задания моего товарища, он без нета положил выложить, помогите пожалуйста
14K
08 января 2007 года
m1cRo
12 / / 05.03.2006
А чо за гркпп?
15K
08 января 2007 года
Sara
79 / / 04.01.2007
Ну, со второй задачей все понятно. Надо написать функцию int_to_str(int num, int q), которая преобразуют натуральное число num в строку, где q - основание системы счисления. Т.е. int_to_str(20, 10) должна вернуть строку "20". А затем написать функцию is_palindrom(char* str), которая возвращает true, если строка является палиндромом, и false в противном случае. Вот, в принципе, и все, что тебе нужно. Задание довольно простое. Как разбивать число на цифры - это на нашем форуме уже обсуждалось :)

А в первой задаче я, чессно говоря, пока не въехала, че там надо сделать :( .
15K
09 января 2007 года
Sara
79 / / 04.01.2007
Цитата: vanyavl
1. Дана символьная матрица размера n на m, в каждой строк которой имеется по крайней мере один из пробелов, за которым следует отличные от пробела символы. За щет изменения гркпп пробелов внутир строк нужно добиться того, что бы в конце каждой из строк пробелы отсуцтвовали. Количества пробелов в разных группах, распологающихся внутри одной и той же строки, должны различаться не более чем на единицу.


Кажется, начинаю понимать. Эта задача похожа на выравнивание текста по ширине, которое часто используется в текстовых редакторах. На вход подается строка с произвольно расставленными пробелами, а на выходе должна получиться строка, у которой по краям (в конце и в начале) пробелы отсутствуют, т.е. все пробелы распределены в промежутках между словами. Причем длины этих промежутков должны отличаться не более чем на 1. Например, если дана строка "##aaa#bb###cccc#", то в результате должно получиться "aaa####bb###cccc" (пробелы я обозначила # для наглядности). Я правильно понимаю?

361
09 января 2007 года
Odissey_
661 / / 19.09.2006
гркпп это ,видимо, групп.
Перечитал три раза первую задачу. Никак не могу взять в толк - "Как в конце строки могут взяться пробелы?"(а это и надо исправить, если я правильно понял), Ведь написано же
Цитата:
матрица размера n на m, в каждой строк которой имеется по крайней мере один из пробелов, за которым следует отличные от пробела символы.


Ведь если это утверждение истинно, то в конце строки не может быть пробела, так как за ним всегда должен стоять хотябы один отличный от пробела символ?
И что понимаеться под понятием группа пробелов в строке тогда, если по условие за пробелом идет отличный от него символ?
Извините, если не в тему =)

15K
09 января 2007 года
Sara
79 / / 04.01.2007
Цитата: Odissey_
гркпп это ,видимо, групп.
Перечитал три раза первую задачу. Никак не могу взять в толк - "Как в конце строки могут взяться пробелы?"(а это и надо исправить, если я правильно понял), Ведь написано же

Ведь если это утверждение истинно, то в конце строки не может быть пробела, так как за ним всегда должен стоять хотябы один отличный от пробела символ?
И что понимаеться под понятием группа пробелов в строке тогда, если по условие за пробелом идет отличный от него символ?
Извините, если не в тему =)


На самом деле, там не сказано, что после каждого пробела идут отличные от пробела символы. Там говорится: "по крайней мере один пробел, за которым следуют..."

Да и вообще, вся задача очень небрежно сформулирована. :mad:
Можно только пытаться угадать, что автор имел в виду.

Я в предыдущем посте предложила одну из возможных интерпретаций. Хотя понимаю, что их может быть множество.

361
09 января 2007 года
Odissey_
661 / / 19.09.2006
to Sara
да, похоже вы правы, очь похоже на задачу "разряжения" символов пробелами.

Достаточно решить задачу для одной строки. Самое простое что приходит на ум, эт что-то типа того как моя бабушка размещала комики теста на печенье =).

inStr - входная строка (char []),
n - длина строки,
outStr - выходная строка (char []).
...
Код:
unsigned char sum=0;          // число пробелов
 unsigned char spaceAtEnd=0;// число пробелов в конце
 unsigned char count=0;        // количество пробелов в группе
 unsigned char num=0;          // число групп
 unsigned char mid=0;           // среднее число пробелов
 unsigned char modSpace=0;  // остаток от среднего числа пробелов
 int i=0;                              // временная переменная для циклов
 int j=0;                              // временная переменная для циклов

 // подсчитываем количество пробелов в группах
 for(i=0; i<n; i++)
  {
    if (inStr == ' ')
      count++;
    else
      if (count != 0)
       {
          num++;
          sum += count;
          count = 0;
       };
    if ( (i == (n-1)) && (count != 0) )
       spaceAtEnd = count;
  }//for

 sum += spaceAtEnd;

 if (num != 0) // есть группы не только в конце
  {
    mid = sum / (num);
    modSpace = sum % (num);
 
    // операция вставки пробелов в строку
    j = 0;
    num = 0;
    for( i=0; i<n; i++)
     {
       if (inStr != ' ')
        outStr[j++] = inStr;
       else
        {
         for( count = 0; count < mid; count++ )
            outStr[j++] = ' ';
         if(modSpace != 0)
           {
            outStr[j++] = ' ';
            modSpace--;
           }//if
        }//else
     }//for
  }//if
 else // как таковых групп нет, только в конце
  {
    for( i=0; i<n; i++)
     {
       // переносим все в начало
       j = 0;
       for( i=0; i<sum ; i++)
           outStr[j++] = ' ';
       // добавляем строку
       j = sum;
       for( i=0; i<n; i++)
        {
          if (inStr != ' ')
           outStr[j++] = inStr;
        }
  }
...

приблизительно так. !внимание! кодилось все на коленках, времени ни то что отладить, скомпилить не было, так что вычесывать код, если он пригодится конечно, придется вам. Но надеюсь общая идея надеюсь ясна. Собствено поэтому и сабж.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог