Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
93ruslan93
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 4
1

Заданы 6 цифр и число. Используя скобки и бинарные арифметические операции +,-,*,/, получить заданное число

04.04.2015, 20:15. Просмотров 996. Ответов 2
Метки нет (Все метки)

помогите написать программу на C#, как-нибудь отблагодарю

Заданы 6 цифр и число. Используя скобки и бинарные арифметические операции +,-,*,/, получить заданное число, результатом функции должно быть арифметическое выражение в инфиксной форме. Если ответов несколько, вывести а)любой из них б) все ,(Примечание: деление разрешается использовать лишь в том случае, если частное будет целым)

пример:
(f(8 9 4 3 9 2) 100)
(89*(4-3)+9+2) или (89+(4-3)*9+2) или (8*(9+4)-3+9-2)
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2015, 20:15
Ответы с готовыми решениями:

Используя запись в стек, получить число, составленное из цифр последовательности, записанных в обратном порядке
Дана последовательность символов, состоящая из английских букв и цифр, записанных в текстовом...

Используя скобки и бинарные арифметические операции +,-,*,/, получить заданное число
помогите написать программу на CommonLisp, как-нибудь отблагодарю Заданы 6 цифр и число....

Используя скобки и бинарные арифметические операции +,-,*,/, получить заданное число
помогите написать программу на F#, как-нибудь отблагодарю Заданы 6 цифр и число. Используя...

Данное натуральное число N. Используя только элементарные арифметические операции (+, -, *, /)
Ув.пользователи, помогите решить задачку (С + + или Visual C + +), очень нужно!( Данное...

Составить из х цифр у число к используя арифметические выражения
Помогите пожалуйста сделать задачку на Prolog. (если это возможно) Даны три числа: х, у, к....

2
Constantius24
67 / 67 / 42
Регистрация: 30.03.2015
Сообщений: 371
04.04.2015, 20:23 2
Знаю, что если описывать алгоритм решения таких примеров в коде, то нужно использовать регулярные выражения.
Когда у самого встала такая задача(в универе калькулятор надо было сделать), то я передал пример в excel и получил результат.
0
Storm23
Эксперт .NETАвтор FAQ
9201 / 4449 / 1617
Регистрация: 11.01.2015
Сообщений: 5,683
Записей в блоге: 34
05.04.2015, 18:47 3
Лучший ответ Сообщение было отмечено 93ruslan93 как решение

Решение

93ruslan93, Это ж где такие задачки задают?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication175
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var counter = 0;
            var calc = new Solver();
            var list = calc.Solve(100, new int[] {8, 9, 4, 3, 9, 2});
            foreach (var solution in list)
            {
                Console.WriteLine(solution);
                counter++;
                if (counter >= 100)
                {
                    Console.WriteLine("Found 100 solutions. Continue? (y/n)");
                    switch ((char) Console.Read())
                    {
                        case 'y':
                        case 'Y':
                            continue;
                        default:
                            break;
                    }
                    counter = 0;
                }
            }
            Console.ReadLine();
        }
    }
 
    class Solver
    {
        public IEnumerable<string> Solve(int target, params int[] arguments)
        {
            //генерируем всевозможные перестановки аргументов
            foreach (var permutation in GetPermutations(arguments, 0, arguments.Length - 1))
            //генерируем всевозможные объединения цифр в числа
            foreach (var union in GetUnions(arguments))
            {
                var calc = new Calculator(union);
                //генерируем всевозможные операции над аргументами, вычисляем результат
                foreach (var res in calc.CalcVariants())
                    if (res == target)
                        yield return calc.ExpressionStack.Peek();
            }
        }
 
        IEnumerable<IList<int>> GetUnions(IList<int> arr)
        {
            var res = new List<int>();
            return GetUnions(arr, 0, res);
        }
 
        IEnumerable<IList<int>> GetUnions(IList<int> arr, int from, IList<int> res)
        {
            if (from >= arr.Count)
                yield return res;
 
            for(int i=from; i < arr.Count;i++)
            {
                res.Add(Union(arr, from, i));
                foreach (var r in GetUnions(arr, i + 1, res))
                    yield return r;
                res.RemoveAt(res.Count - 1);
            }
        }
 
        int Union(IList<int> arr, int from, int to)
        {
            var res = arr[from];
            for (int i = from + 1; i <= to; i++)
                res = Union(res, arr[i]);
 
            return res;
        }
 
        int Union(int a, int b)
        {
            if (b == 0)
                return a*10;
            return a*(int)Math.Pow(10, 1 + (int)Math.Log10(b)) + b;
        }
 
        IEnumerable<IList<int>> GetPermutations(IList<int> arr, int i, int n)
        {
            int j;
            if (i == n)
                yield return arr;
            else
            {
                for (j = i; j <= n; j++)
                {
                    Swap(arr, i, j);
                    foreach(var p in GetPermutations(arr, i + 1, n))
                        yield return p;
                    Swap(arr, i, j);
                }
            }
        }
 
        void Swap(IList<int> arr, int i, int j)
        {
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }
 
    class Calculator
    {
        public StackWithUndo<int> Stack = new StackWithUndo<int>();
        public StackWithUndo<string> ExpressionStack = new StackWithUndo<string>();
        public StackWithUndo<int> Arguments;
        public string Solution = "";
 
        private readonly Func<bool>[] AllowedOperations;
 
        public Calculator(IList<int> arguments)
        {
            Arguments = new StackWithUndo<int>(arguments);
            AllowedOperations = new Func<bool>[] { Up, Add, Sub, Mul, Div };
        }
 
        public IEnumerable<int> CalcVariants()
        {
            if (Stack.Count == 1)
                yield return Stack.Peek();
 
            var argState = Arguments.RememberState();
            var stackState = Stack.RememberState();
            var expressionState = ExpressionStack.RememberState();
            var s = Solution;
 
            foreach(var op in AllowedOperations)
            {
                if (op())
                    foreach (var res in CalcVariants())
                        yield return res;
 
                Stack.RestoreState(stackState);
                Arguments.RestoreState(argState);
                ExpressionStack.RestoreState(expressionState);
                Solution = s;
            }
        }
 
 
        bool Up()
        {
            if(Arguments.Count > 0)
            {
                var arg = Arguments.Pop();
                ExpressionStack.Push(arg.ToString());
                Stack.Push(arg);
                return true;
            }
 
            return false;
        }
 
        bool Add()
        {
            if (Stack.Count > 1)
            {
                var arg1 = Stack.Pop();
                var arg2 = Stack.Pop();
                ExpressionStack.Push(string.Format("({1}+{0})", ExpressionStack.Pop(), ExpressionStack.Pop()));
                Stack.Push(arg2 + arg1);
                return true;
            }
 
            return false;
        }
 
        bool Sub()
        {
            if (Stack.Count > 1)
            {
                var arg1 = Stack.Pop();
                var arg2 = Stack.Pop();
                ExpressionStack.Push(string.Format("({1}-{0})", ExpressionStack.Pop(), ExpressionStack.Pop()));
                Stack.Push(arg2 - arg1);
                return true;
            }
 
            return false;
        }
 
        bool Mul()
        {
            if (Stack.Count > 1)
            {
                var arg1 = Stack.Pop();
                var arg2 = Stack.Pop();
                ExpressionStack.Push(string.Format("{1}*{0}", ExpressionStack.Pop(), ExpressionStack.Pop()));
                Stack.Push(arg2 * arg1);
                return true;
            }
 
            return false;
        }
 
        bool Div()
        {
            if (Stack.Count > 1)
            {
                var arg1 = Stack.Pop();
                var arg2 = Stack.Pop();
                if (arg1 != 0 && (arg2 % arg1 == 0))
                {
                    ExpressionStack.Push(string.Format("{1}/{0}", ExpressionStack.Pop(), ExpressionStack.Pop()));
                    Stack.Push(arg2/arg1);
                    return true;
                }
                Stack.Push(arg2);
                Stack.Push(arg1);
            }
 
            return false;
        }
    }
 
    class StackWithUndo<T>: Stack<T>
    {
        public StackWithUndo()
        {
        }
 
        public StackWithUndo(IEnumerable<T> coll) : base(coll)
        {
        }
 
        public List<T> RememberState()
        {
            return new List<T>(this);
        }
 
        public void RestoreState(List<T> state)
        {
            base.Clear();
            for (int i = state.Count - 1; i >= 0;i--)
                base.Push(state[i]);
        }
    }
}
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2015, 18:47

Получить заданное число m сложением/вычитанием цифр
Очень-очень нужна помощь! дано n (n&gt;=2) количество цифр от 1 до 9 и любое число m. Написать...

Изменяя число i от 1 до n (без пробелов) получить число. Посчитать в нем количество каждых цифр. Посчитать общее число цифр
Дано число n меньше или равно 30 000. Изменяя число i от 1 до n будем записывать получившееся число...

Дано целое число А. Получить А в 5-й степени, используя только три операции умножения
Дано целое число А. Получить А в 5-й степени, используя только три операции умножения.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru