Сложнейшая задача на VC
1. Дана символьная матрица размера n на m, в каждой строк которой имеется по крайней мере один из пробелов, за которым следует отличные от пробела символы. За щет изменения гркпп пробелов внутир строк нужно добиться того, что бы в конце каждой из строк пробелы отсуцтвовали. Количества пробелов в разных группах, распологающихся внутри одной и той же строки, должны различаться не более чем на единицу.
2 Получить все меньшие 1000000 натуральные числа, которые являются палнидромами как в десятичной так и в q-ичных системах. Необходимо создать функцию, перевода числа из десятичной в q-ичную систему счсления.
Примечание: Назовем натуральное число палиндромом, если его запись читается одинаково как сначала так и с конца(например 4554, 393, 1, ...).
А в первой задаче я, чессно говоря, пока не въехала, че там надо сделать :( .
Кажется, начинаю понимать. Эта задача похожа на выравнивание текста по ширине, которое часто используется в текстовых редакторах. На вход подается строка с произвольно расставленными пробелами, а на выходе должна получиться строка, у которой по краям (в конце и в начале) пробелы отсутствуют, т.е. все пробелы распределены в промежутках между словами. Причем длины этих промежутков должны отличаться не более чем на 1. Например, если дана строка "##aaa#bb###cccc#", то в результате должно получиться "aaa####bb###cccc" (пробелы я обозначила # для наглядности). Я правильно понимаю?
Перечитал три раза первую задачу. Никак не могу взять в толк - "Как в конце строки могут взяться пробелы?"(а это и надо исправить, если я правильно понял), Ведь написано же
Ведь если это утверждение истинно, то в конце строки не может быть пробела, так как за ним всегда должен стоять хотябы один отличный от пробела символ?
И что понимаеться под понятием группа пробелов в строке тогда, если по условие за пробелом идет отличный от него символ?
Извините, если не в тему =)
Перечитал три раза первую задачу. Никак не могу взять в толк - "Как в конце строки могут взяться пробелы?"(а это и надо исправить, если я правильно понял), Ведь написано же
Ведь если это утверждение истинно, то в конце строки не может быть пробела, так как за ним всегда должен стоять хотябы один отличный от пробела символ?
И что понимаеться под понятием группа пробелов в строке тогда, если по условие за пробелом идет отличный от него символ?
Извините, если не в тему =)
На самом деле, там не сказано, что после каждого пробела идут отличные от пробела символы. Там говорится: "по крайней мере один пробел, за которым следуют..."
Да и вообще, вся задача очень небрежно сформулирована. :mad:
Можно только пытаться угадать, что автор имел в виду.
Я в предыдущем посте предложила одну из возможных интерпретаций. Хотя понимаю, что их может быть множество.
да, похоже вы правы, очь похоже на задачу "разряжения" символов пробелами.
Достаточно решить задачу для одной строки. Самое простое что приходит на ум, эт что-то типа того как моя бабушка размещала комики теста на печенье =).
inStr - входная строка (char []),
n - длина строки,
outStr - выходная строка (char []).
...
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;
}
}
приблизительно так. !внимание! кодилось все на коленках, времени ни то что отладить, скомпилить не было, так что вычесывать код, если он пригодится конечно, придется вам. Но надеюсь общая идея надеюсь ясна. Собствено поэтому и сабж.