08.04.2009, 20:22 | #1 (permalink) |
Новичок
Регистрация: 15.02.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите решить задачи на C++
1. Дан прямоугольник с размерами a*b.От него отрезают квадраты максимального размера,пока это возможно.Затем от оставшегося прямоугольника вновь отрезают квадраты максимально возможного размера и т.д.На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник? 2.Дано к грибов. Вводя определенное число,нам экран выдает "Мы собрали к [гриб,грибов или гриба]"пример: Мы собрали 1 гриб или 22 гриба. заранее спасибо!!! |
08.04.2009, 20:22 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Я уверен, что решение данной темы уже встречалось Помогите решить задачи Помогите решить задачи Помогите решить задачи |
12.04.2009, 15:11 | #2 (permalink) |
Новичок
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Про грибы типа так...
/* грыбы*/ #include <windows.h> #include <winuser.h> #include <iostream> using namespace std; void main() { int size = 0; int octatok = 0; char buf[255]; // включение русского языка в консоли char res [9]; CharToOem("Введите количество грибов: ",buf); CharToOem("Mы нашли ",res); cout << buf; cin >> size; octatok=size; if (size == 1) CharToOem(" гриб",buf); else { while (true) { octatok=octatok%10; if (octatok<9)break; } if (octatok == 2 && octatok == 3 && octatok == 4 ) CharToOem(" грибa",buf); else CharToOem(" грибов",buf); } // Вывод результата cout << res << size << buf<< endl; cin.get(); } PS: я не спец в Сях, возможно есть более красивое решение... |
12.04.2009, 18:54 | #4 (permalink) |
Новичок
Регистрация: 15.02.2009
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
вот пример в цифрах.
дан прямоугольник с размерами 425*131.От него отрезают квадраты со стороной 131.,пока это возможно.Затем от оставшегося прямоугольника вновь отрезают квадраты со стороной,равно 425-131*3=32 ,и т.д.На какие квадраты и в каком количестве будет разрезан исходный прямоугольник. |
12.04.2009, 21:43 | #5 (permalink) |
Новичок
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
/*квадраты*/
#include <windows.h> #include <winuser.h> #include <iostream> using namespace std; void main() { int a, b, temp, step=0; int kvadr[100]; char buf[255]; // включение русского языка в консоли CharToOem("Введите стороны прямоугольника a = ",buf); cout << buf; cin >> a; CharToOem("Введите стороны прямоугольника b = ",buf); cout << buf; cin >> b; while(a!=0 && b!=0) { if (a<b) { temp=a; a=b; b=temp; } kvadr[step]=b; step++; a=a-b; } // Вывод результата CharToOem("Шаг --- Сторона квадрата",buf); cout << buf<< endl; for (int i=0; i< step; i++) { cout << i+1 << " --- " << kvadr[i]<< endl; } cin.get(); } Прога работает, хотя я написал ее скорее в стиле паскаля, (ну не сишник я...) И еще массив kvadr[] я объявил на 100 элементов. Последний раз редактировалось abv-lam; 12.04.2009 в 22:02 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
12.04.2009, 22:14 | #6 (permalink) |
Новичок
Регистрация: 12.04.2009
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Про грибы. Только сообразил, что 101 это тоже гриб, поэтому должно быть так
/* грыбы*/ #include <windows.h> #include <winuser.h> #include <iostream> using namespace std; /************************************************** ************* Главный модуль ************************************************** ***************/ void main() { int size = 0; int octatok = 0; char buf[255]; // включение русского языка в консоли char res [9]; CharToOem("Введите количество грибов: ",buf); CharToOem("Mы нашли ",res); cout << buf; cin >> size; octatok=size; if (size == 1) CharToOem(" гриб",buf); else { while (true) { octatok=octatok%10; if (octatok<9)break; } if (octatok == 1 && size!=11) CharToOem(" гриб",buf); else { if (octatok == 2 || octatok == 3 || octatok == 4 ) CharToOem(" грибa",buf); else CharToOem(" грибов",buf); } } // Вывод результата cout << res << size << buf<< endl; cin.get(); } |
14.04.2009, 11:12 | #7 (permalink) | ||
Member
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
|
По поводу грибов.
Если я правильно понимаю код, то: Цитата:
2. octatok%10 всегда будет < 10 поэтому логичнее будет написать вместо этого куска кода строчку: Цитата:
Предлагаю свой вариант: Код:
#include <iostream> using namespace std; int main(int argc, char **argv) { int k; cout << "Введите количество грибов: "; cin >> k; cout << "Мы собрали: " << tmp << k << " "; if ((k > 10) && (k < 20)) cout << "грибов"; else { k %= 10; if (k == 1) cout << "гриб"; else if ((k == 2) || (k == 3) || (k == 4)) cout << "гриба"; else cout << "грибов"; } } Код:
#include <windows.h> #include <iostream> using namespace std; int main(int argc, char **argv) { int k; char tmp[256]; CharToOem("Введите количество грибов: ", tmp); cout << tmp; cin >> k; CharToOem("Мы собрали: ", tmp); cout << tmp << k << " "; if ((k > 10) && (k < 20)) CharToOem("грибов", tmp); else { k %= 10; if (k == 1) CharToOem("гриб", tmp); else if ((k == 2) || (k == 3) || (k == 4)) CharToOem("гриба", tmp); else CharToOem("грибов", tmp); } cout << tmp << "\n"; } Последний раз редактировалось csbwalker; 14.04.2009 в 12:26 Причина: добавление своего варианта |
||
14.04.2009, 12:09 | #8 (permalink) |
Member
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
|
С прогой по квадратам полностью согласен, но сделал бы чуть попроще вывод результата, и м.б. убрал бы жёсткую завязку на винды, но тут на вкус и цвет...
На всякий случай постю свой вариант Код:
#include <iostream> using namespace std; bool pri(int &a, int &b) // Приводит стороны так, что бы "a" было < "b" // Если прямоугольник вырожденный - возвращает false { if ((a == 0) || (b == 0)) return false; if (a > b) { int t = a; a = b; b = t; } return true; } int main(int argc, char **argv) { int a, b; // Вводим параметры cout << "Enter a: "; cin >> a; cout << "Enter b: "; cin >> b; while( pri(a, b) ) // Выполняем пока прямоугольник не вырожденный { // Выводим размерность и количество для текущего квадрата cout << "\n" << a << "x" << a << " : " << b / a; // Уменьшаем размер прямоугольника b %= a; }; } Последний раз редактировалось csbwalker; 14.04.2009 в 12:27 |
26.04.2009, 15:50 | #10 (permalink) |
Новичок
Регистрация: 26.04.2009
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Здравствуйте! Мне жутко нужна помощь....Допуск к экзамену.... Нужно написать программу стекового калькулятора на Си(((( У меня никак не получается.... Вот условие самой задачи: "На входе - строка, содержащая выражение в постфиксной записи. На выходе - строка, результат вычислений.
пример: ввод: 1 23 + 4 - 5 1 - *. вывод: 80 Числа: целые неотрицательные. Должны поддерживаться следующие двуместные арифметические операции: + - * / Каждая из них берет аргумент со стека, сначала первый, потом - второй, выполняет над ним действие и результат помещает на вершину стека. Кроме того должна поддерживаться операция '.' - она берет один аргумент со стека и печатает его на вывод." Вот такая задача.... Заранее очень благодарна хоть в какой-то помощи)) |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|