Страница: 1 |
Страница: 1 |
Вопрос: Srochno Pomogite (na C++ ili C)
Добавлено: 26.01.05 04:53
Автор вопроса:
AASoft
Zapisalsya na olimpiadu, a v shkole urokami zavalili.....v obshem tam pervyj tur budet na vybor kvalificirovannyh uchasnikov, i zadachi nado reshat` doma....esli kto znaet C ili C++ horosho, mozhete pomoch`? tama 5 zadach, mne nado poslednie dve i vtoruyu......zadachi na angliskom.....
Zaranee spasibki vsem kto voz`metsya pomoch`...
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа: AASoft
Вопросов: 86
Ответов: 920
Профиль | | #1
Добавлено: 26.01.05 04:53
vo blin, zabyl link polozhit`...
v PDF'e na angliskom..
http://www.cs.sfu.ca/news/events/psc/qual1/qual1.pdf
Номер ответа: 2
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 30.01.05 07:08
Вторая задача:
// Комментарии к коду:
// Очевидно, каждый из возможных треугольников имеет левую верхнюю вершину, причем только одну. Таким образом, перебирая все возможные левые верхние вершины, все возможные типы треугольников, и все возможные их размеры и проверяя, одинаковые ли буквы стоят внутри их (сравнивая с левой верхней вершиной), можно получить все существующие в матрице треугольники.
#include <stdio.h>
#define MAX_MATRICES 100
#define MAX_DIMENSION 30
int main(){
int m[MAX_DIMENSION][MAX_DIMENSION], res[MAX_MATRICES][26], dim=-1, i, j, s, fs, k, l, z, nm=0, lit[MAX_MATRICES][26];
char buff[MAX_DIMENSION+2];
// Пока есть матрицы
while(1){
// Считываем очередную матрицу
scanf("%d", &dim);
if(!dim) break;
for(i=0; i<dim; i++){
scanf("%s", buff);
for(j=0; j<dim; j++){
m[j] = buff[j];
}
}
// Обнуляем массивы встречающихся букв и результата для текущей матрицы
for(i=0; i<26; i++){
lit[nm] = 0;
res[nm] = 0;
}
// Смотрим, какие буквы встречаются в матрице
for(i=0; i<dim; i++){
for(j=0; j<dim; j++){
lit[nm][m[j] - 'A'] = 1;
}
}
// Размышляем
for(i=0; i<dim; i++){
for(j=0; j<dim; j++){
fs = m[j]; // Все символы в треугольнике должны быть такие же, как в вершине
for(s=1; s<=dim; s++){ // Все возможные размеры
// Первый тип треугольников
// AA
// A
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+s < dim && j+s < dim){ // Треугольник должен помещаться в матрице
for(k=0; k<=s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=0; l<=s-k; l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
// Второй тип треугольников
// A
// AA
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+s < dim && j+s < dim){ // Треугольник должен помещаться в матрице
for(k=0; k<=s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=0; l<=k; l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
// Третий тип треугольников
// A
// AA
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+s < dim && j-s >= 0){ // Треугольник должен помещаться в матрице
for(k=0; k<=s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=-k; l<=0; l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
// Четвертый тип треугольников
// AA
// A
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+s < dim && j+s < dim){ // Треугольник должен помещаться в матрице
for(k=0; k<=s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=k; l<=s; l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
// Пятый тип треугольников
// A
// AAA
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+s < dim && j+s < dim && j-s >= 0){ // Треугольник должен помещаться в матрице
for(k=0; k<=s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=-k; l<=k; l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
// Шестой тип треугольников
// A
// AA
// A
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+2*s < dim && j+s < dim){ // Треугольник должен помещаться в матрице
for(k=0; k<=2*s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=0; l<=(k>s?2*s-k:k); l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
// Седьмой тип треугольников
// AAA
// A
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+s < dim && j+2*s < dim){ // Треугольник должен помещаться в матрице
for(k=0; k<=s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=k; l<=2*s-k; l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
// Восьмой тип треугольников
// A
// AA
// A
z = 1; // Изначально считаем треугольник содержащим одинаковые символы
if(i+2*s < dim && j-s < dim){ // Треугольник должен помещаться в матрице
for(k=0; k<=2*s; k++){ // Проверяем все символы треугольника на одинаковость
for(l=(k>s?k-2*s:-k); l<=0; l++){
if(m[i+k][j+l] != fs) z=0;
}
}
if(z == 1) res[nm][fs-'A']++;
}
}
}
}
nm++; // Номер матрицы увеличился
}
// Выводим результаты
int bl; // Это начало строки?
for(i=0; i<nm; i++){
bl = 1;
for(j=0; j<26; j++){
if(lit[j]){ // Если буква в матрице встречалась
if(!bl) printf(", " // Если это не начало строки, вставить запятую и пробел
bl = 0;
printf("%d %c triangle", res[j], j+'A');
if(res[j]!=1) printf("s" // Если треугольников не 1, нужно использовать множественное число
}
}
printf("\n"
}
return 0;
}
Остальные, надеюсь, чуть погодя
Номер ответа: 3
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 30.01.05 10:49
Четвертая на вывод, я такие задачи не уважаю. Вот программа, выводящая треугольник Паскаля с меньшими затратами на форматирование, с напильником немного поработай
#include <stdio.h>
#define MAX_LINES 20
int main(){
int i, j, n;
long m[MAX_LINES][MAX_LINES];
for(i=0; i<MAX_LINES; i++){
m[0] = 1;
m = 1;
}
scanf("%d", &n);
for(i=2; i<=n; i++){
for(j=1; j<i; j++){
m[j] = m[i-1][j] + m[i-1][j-1];
}
}
for(i=0; i<n; i++){
for(j=0; j<=i; j++) printf("%d\t", m[j]);
printf("\n"
}
return 0;
}
Номер ответа: 4
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 30.01.05 10:50
О ужас! Я только что обнаружил, что [ i ] в коде считается за код включения курсива! Павел, это надо срочно пофиксить, писать же на С++ невозможно!
Номер ответа: 5
Автор ответа: AASoft
Вопросов: 86
Ответов: 920
Профиль | | #5
Добавлено: 31.01.05 00:31
Spasibo Sharp!
S triugol`nikom Pascalya ya uzhe i sam reshil, pravda u menya koda razav tri bol`she..... o.O
a vtoruyu zadachu - vyshli na email, AASoft@gmail.com
a to ee na samom dele pisat` i chitat` nevozmozhno.....
eshe raz spasibo...ostal`noe ta dumayu sam dogonyu kak sdelat`..
Номер ответа: 6
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #6
Добавлено: 31.01.05 07:30
Выслал. Пятую задачу тебе решать или сам разберешься?
Номер ответа: 7
Автор ответа: AASoft
Вопросов: 86
Ответов: 920
Профиль | | #7
Добавлено: 31.01.05 23:44
da ne znayu dazhe, mysli kakieto byli, no dazhe ne nachinal eshe...esli dumaesh` ne dolgo ne dolgo budesh` delat` to pishi, a voobshe dumayu sam sdelayu.....
Номер ответа: 8
Автор ответа: AASoft
Вопросов: 86
Ответов: 920
Профиль | | #8
Добавлено: 02.02.05 02:53
Sharp, mozhesh` eshe raz poslat`, a to ne doshlo cheto.
Pasibki
Номер ответа: 9
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 02.02.05 22:55
Выслал еще раз. А теперь:
[РЕКЛАМА!]
Что такое почта на Яндексе?
1) Вам никогда не будет приходить спам (никогда - значит не чаще раза в месяц)
2) всегда стабильно работающие POP3 и SMTP сервера
3) удобный и беотказный Web-интерфейс
4) отличная фильтрация вирусов
5) удаляется только спам, важные письма всегда доходят
6) пространство под письма неограничено
На других серверах вашу важную корреспонденцию могут удалять по совершенно непонятным причинам, вам будут приходить тонны спама и вы никак не сможете отличить их от обычных писем, не прочитав, вы сможете приконнектиться к ним не чаще 2 раз в день на 5 минут, вам будут приходить все новые вирусы, переполняя ваш крошечный ящик, требующий чистки каждые 5 часов. На Яндексе такого не будет никогда! Пользуйтесь почтой Яндекса!
[/РЕКЛАМА!]
Номер ответа: 10
Автор ответа: AASoft
Вопросов: 86
Ответов: 920
Профиль | | #10
Добавлено: 03.02.05 07:41
razve chto ato ot google'a email....to est` gmail.com
esli nado, mogu yashik sdelat`
Номер ответа: 11
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 03.02.05 13:21
Не, не надо, насколько я знаю, почта Яндекса лучше, чем gmail