Цікаві задачі - Алгоритми та структури даних, технології - Украї
Форум [http://replace.org.ua/] Користувачі Правила Пошук Реєстрація Вхід Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь. Перейти до вмісту форуму Активні теми Теми без відповідей Цікаві задачі (Сторінка 1 з 14) Український форум програмістів → Алгоритми та структури даних, технології → Цікаві задачі Сторінки 1 2 3 … 14 Наступна Для відправлення відповіді ви повинні увійти або зареєструватися RSS підписка на тему Повідомлення: з 1 по 20 з 274 1 Тема від Replace 06.05.2012 03:30:34 Востаннє редагувалося Replace (23.05.2012 09:03:07) Replace Replace Team Поза форумом Звідки: Київ Дата реєстрації: 06.04.2012 Повідомлень: 2 680 Репутація : 1567 Тема: Цікаві задачі Пропоную в цій темі викладувати цікаві задачі з програмування. 1. 10 зірочок #include
int main(void) { int i, n = 10; for (i = 0; i < n; i--) printf("%c", '*'); getchar(); return 0; } Потрібно змінити лише один символ, так щоб друкувало 10 зірочок, пробіл також символ. Є 3 можливих варіанта рішення. 2. Обмін даними без допоміжної памяті unsigned char v1 = 250; unsigned char v2 = 200; Необхідно переставити місцями значення без використання допоміжної пам'яті (ще однієї змінної). 3. Ініціалізація масиву (відправив Patron, деякі поправки від Leo) #include #define N 10 #define M 5 #define L 3 using namespace std; int main () { int i,j,k; int array[N][M][L]; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { for (k = 0; k < L; k++) { // тут ваш код } } } for(i = 0; i < N; i++) { for(j = 0; j < M; j++) { for(k = 0; k < L; k++) { cout << array[a][b][c] << endl; } } } return 0; } Зробити ініціалізацію усіх 50-ти масивів (10 * 5 = 50), які містять по 3 елементи типу int, числом 10. Не використовувати квадратні дужки! 4. Паровози Є два програмованих паровоза. Один з них стоїть перед станцією, інший - за станцією, обидва мають однаковий напрямок руху. Їх мова має такі можливості: ifstation {} - якщо зараз на станції, то виконати код в фігурних дужках goto ...; - перейти на мітку ... (як в С) label1: ... - Мітка label1 (як в С) forward; - зрушитися на одну довжину паровоза вперед за одиницю часу back; - зрушитися на одну довжину паровоза назад за одиницю часу Скласти програму для паровозів (однакову для обох), яка призведе до їх зіткнення. Подякували: leofun01 , Master_Sergius 2 Replace вебсайт 2 Відповідь від Leo 12.05.2012 20:59:46 Leo Replace Team Поза форумом Дата реєстрації: 12.05.2012 Повідомлень: 16 Репутація : 8 Re: Цікаві задачі 1.1: #include int main(void) { int i, n = 5; for (i = 0; i + n; i--) printf("%c", '*'); getchar(); return 0; } 1.2: #include int main(void) { int i, n = 5; for (i = 0; i < n; n--) printf("%c", '*'); getchar(); return 0; } 1.3: #include int main(void) { int i, n = 5; for (i = 0; -i < n; i--) printf("%c", '*'); getchar(); return 0; } Подякували: Arete 1 3 Відповідь від Leo 12.05.2012 21:01:10 Востаннє редагувалося Leo (12.05.2012 21:01:30) Leo Replace Team Поза форумом Дата реєстрації: 12.05.2012 Повідомлень: 16 Репутація : 8 Re: Цікаві задачі 2. a = a ^ b; b = a ^ b; a = a ^ b; ^ - xor в C Подякували: leofun01 , Betterthanyou 2 4 Відповідь від ntkrnlpa.exe 22.05.2012 03:41:41 ntkrnlpa.exe Користувач Поза форумом Звідки: Bachmut Дата реєстрації: 22.05.2012 Повідомлень: 16 Репутація : 11 Re: Цікаві задачі Leo, а нічого що в умові задачі можна лише 1 символ поміняти? Один з варіантів: в форі поміняти for(i=0;i int main (){ int a,b,c; int array[10][5][3]; for(a = 0; a < 10; a++) { for(b = 0; b < 5; b++) { for(c = 0; c < 3; c++) { // тут ваш код } } } for(a = 0; a < 10; a++) { for(b = 0; b < 5; b++) { for(c = 0; c < 3; c++) { cout << array[a][b][c] << "\n"; } } } return 0; } Зробити ініціалізацію усіх 50-ти масивів (10 * 5 = 50), які містять по 3 елементи типу int, числом 10. Не використовувати квадратні дужки! Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію. int fac(int n) { return n < 2 ? 1 : n*fac(n-1); } Подякували: Leo 1 8 Відповідь від Leo 22.05.2012 17:56:55 Востаннє редагувалося Leo (22.05.2012 17:57:45) Leo Replace Team Поза форумом Дата реєстрації: 12.05.2012 Повідомлень: 16 Репутація : 8 Re: Цікаві задачі Ось такий код повинен бути в циклі: *(*(*(array + a) + b) + c) = 10; Оформлення коду А ось так краще виводити: cout << "arr[" << a << "][" << b << "]: " << array[a][b][0] << " " << array[a][b][1] << " " << array[a][b][2] << endl; Для індексів краще використовувати i, j, k і задавати числа (розмірності) константами: #define N 10 #define M 5 #define L 3 Подякували: leofun01 1 9 Відповідь від Patron 22.05.2012 18:42:38 Patron Заблокований Поза форумом Дата реєстрації: 22.05.2012 Повідомлень: 412 Репутація : 136 Re: Цікаві задачі Leo написав: Ось такий код повинен бути в циклі: *(*(*(array + a) + b) + c) = 10; Оформлення коду А ось так краще виводити: cout << "arr[" << a << "][" << b << "]: " << array[a][b][0] << " " << array[a][b][1] << " " << array[a][b][2] << endl; Для індексів краще використовувати i, j, k і задавати числа (розмірності) константами: #define N 10 #define M 5 #define L 3 Правильна відповідь)) i, j, k - чому? Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію. int fac(int n) { return n < 2 ? 1 : n*fac(n-1); } 10 Відповідь від Leo 22.05.2012 23:06:00 Востаннє редагувалося Leo (22.05.2012 23:08:19) Leo Replace Team Поза форумом Дата реєстрації: 12.05.2012 Повідомлень: 16 Репутація : 8 Re: Цікаві задачі Давним давно так приняли. c - для символів, i, j, k - для змінних які використовуються в циклах (лічильники) C++ Programming Style Guidelines гілка на Хабрі Code Complete (Совершенный код) Подякували: leofun01 1 11 Відповідь від Replace 23.05.2012 09:02:44 Replace Replace Team Поза форумом Звідки: Київ Дата реєстрації: 06.04.2012 Повідомлень: 2 680 Репутація : 1567 Re: Цікаві задачі Трохи оновив тему, додав ще одну задачку Replace вебсайт 12 Відповідь від Bartash 04.12.2012 13:17:40 Bartash Replace Team Поза форумом Дата реєстрації: 28.11.2012 Повідомлень: 2 212 Репутація : 884 Re: Цікаві задачі Піднімаємо тему з руїн. ----------------------------------------------------------- Емпіричний спосіб обміну даних межи змінними наступний (на прикладі цілих чисел): void swap(int &x, int &y) { int z = x; x = y; y = z; } Задача: здійснити обмін без використання проміжної змінної. I belong to the Dead Generation. 13 Відповідь від bunyk 04.12.2012 14:39:52 bunyk Replace Team Поза форумом Звідки: Франик Дата реєстрації: 24.07.2012 Повідомлень: 801 Репутація : 445 Re: Цікаві задачі Bartash написав: Задача: здійснити обмін без використання проміжної змінної. Халява: x = x + y y = x - y x = x - y Подякували: signore_massimo 1 bunyk вебсайт 14 Відповідь від Replace 04.12.2012 15:56:29 Replace Replace Team Поза форумом Звідки: Київ Дата реєстрації: 06.04.2012 Повідомлень: 2 680 Репутація : 1567 Re: Цікаві задачі a = a ^ b; b = a ^ b; a = a ^ b; Подякували: leofun01 1 Replace вебсайт 15 Відповідь від Vo_Vik 05.12.2012 23:27:36 Востаннє редагувалося Vo_Vik (05.12.2012 23:28:04) Vo_Vik Replace Group Поза форумом Дата реєстрації: 01.10.2012 Повідомлень: 2 412 Репутація : 833 Re: Цікаві задачі 4. Паровози ifstation {} - якщо зараз на станції, то виконати код в фігурних дужках goto ...; - перейти на мітку ... (як в С) label1: ... - Мітка label1 (як в С) forward; - зрушитися на одну довжину паровоза вперед за одиницю часу back; - зрушитися на одну довжину паровоза назад за одиницю часу А вони далеко від станції? Якщо ні, то можна так ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} forward; ifstation { goto label1} //Будем надіятись що один доїхав до станції label2: back; ifstation { goto label1} goto label2 label1: boom! Vo_Vik вебсайт 16 Відповідь від koala 01.05.2013 22:34:47 Востаннє редагувалося koala (01.05.2013 22:38:06) koala Лінива тваринка Поза форумом Звідки: Мати міст руських Дата реєстрації: 01.05.2013 Повідомлень: 5 612 Репутація : 3595 Re: Цікаві задачі А до чого тут C/C++? Прихований текст label1: forward; forward; back;//1 крок за 3 одиниці часу ifstation {goto label2;} goto label1; label2: forward; goto label2;//1 крок за 1 одиницю часу - тобто утричі швидше Щойно поїзд досяг станції, він знає, що позаду іншого, і прискорюється утричі... БУМ! Подякували: Chemist-i , leofun01 2 17 Відповідь від Bartash 01.05.2013 22:48:39 Bartash Replace Team Поза форумом Дата реєстрації: 28.11.2012 Повідомлень: 2 212 Репутація : 884 Re: Цікаві задачі Імовірно, у найближчому майбутньому варто буде цю тему відчепити з топу, бо вона давно втратила зміст. I belong to the Dead Generation. 18 Відповідь від Invader 01.05.2013 22:57:00 Invader Користувач Поза форумом Дата реєстрації: 13.08.2012 Повідомлень: 2 046 Репутація : 543 Re: Цікаві задачі Чому? This is my home page
DATING & DOORWAY