Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 14.09.2012
Сообщений: 10
1

Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр

06.02.2014, 17:51. Показов 1918. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо выполнить задание "Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр."
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2014, 17:51
Ответы с готовыми решениями:

Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр
Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр

Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр
Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр(цикл с...

Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр
3. Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр. если можно...

Вывести все трёхзначные числа, средняя цифра которых равна сумме первой и второй цифр.
Объясните пожалйуста, как написать задачу в pascal "Напишите программу которая находит и выводит...

14
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
06.02.2014, 20:52 2
как-нибудь уже пробовали? где не получается?
0
1 / 1 / 0
Регистрация: 14.09.2012
Сообщений: 10
06.02.2014, 23:04  [ТС] 3
Уже не актуально
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
s = gets
q = s[0] + s[2]
if s.size == 4
    puts "true"
    else
    puts "false"
end
if q == s[2]
    puts "true"
    else
    puts "false"
end
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
07.02.2014, 09:11 4
sv.SET, этот код не может работать:
если
Ruby
1
q = s[0] + s[2]
то это
Ruby
1
if q == s[2]
обречено на False
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
07.02.2014, 19:11 5
Цитата Сообщение от arni Посмотреть сообщение
sv.SET, этот код не может работать:
если
Ruby
1
q = s[0] + s[2]
то это
Ruby
1
if q == s[2]
обречено на False
Только если s[0] не равно нулю. Но это не так уж и важно, т.к. даже если бы этот код работал (правильно), он всё равно делает не то, что нужно.



Кстати, эта задача легко решается с помошью метода #each_solution:

Ruby
1
2
3
4
5
6
7
if __FILE__ == $PROGRAM_NAME
  using Pattern
 
  [:_, :_1 + :_3, :_].each_solution do |digits|
    puts digits.join(' ')
  end
end
Удачной сдачи!

Определение метода #each_solution
Ruby
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
module Pattern
  class Pattern
    include Enumerable
 
    def initialize(pattern)
      @pattern = pattern.map { |slot| validate slot }
    end
 
    def each
      return enum_for __method__ unless block_given?
 
      while has_digits?
        yield @digits if match_pattern? @digits
      end
    end
 
    private
    def match_pattern?(digits)
      @pattern.each_with_index.all? do |slot, idx|
        next true unless slot.is_a? Expr
 
        slot.eval(digits) == digits.fetch(idx)
      end
    end
 
    def has_digits?
      if !@digits
        @digits ||= initial_digits
      else
        @digits = next_digits
      end
    end
 
    def initial_digits
      @pattern.map do |slot|
        if const? slot
          slot
        else
          0
        end
      end
    end
 
    def next_digits
      enum = @digits.each_with_index
 
      continue = enum.find do |digit, idx|
 
        next false if const? @pattern.fetch(idx)
        next false if digit > 8
 
        true
      end
 
      return nil unless continue
 
      carry, first = false, true
 
      new_digits = enum.reverse_each.each_with_object([]) do |pair, obj|
        digit, idx = pair
 
        next_digit = digit
 
        if const? @pattern.fetch idx
          obj << next_digit
          next
        end
 
        next_digit += 1 if first
        next_digit += 1 if carry
        next_digit = 0 if next_digit > 9
 
        carry = next_digit == 0 && next_digit != digit
 
        first = false
 
        obj << next_digit
      end.reverse
 
      return nil if carry
 
      new_digits
    end
 
    def const?(slot)
      slot.is_a? Numeric
    end
 
    def validate(slot)
      case slot
      when 0..9 then slot
      when Numeric then raise ArgumentError, "Constants must be decimal digits"
      when :_ then slot
      when Symbol then Index.new slot
      when Expr then slot
      else raise ArgumentError, "Expected constant, placeholder, or expression; #{slot} given"
      end
    end
  end
 
  class Expr
    def self.create(thing)
      return thing if thing.is_a? Expr
      Index.new thing
    end
 
    def eval(digits)
      this = @this.eval digits
      that = @that.eval digits
 
      @op.to_proc.call this, that
    end
 
    def method_missing(meth, *args)
      return super if block_given?
      return super unless %i(+ - *).include? meth
      return super unless args.size == 1
 
      Expr.new self, args[0], meth
    end
 
    def initialize(this, that, op)
      @this = this
      @that = that
      @op = op
    end
 
    def to_s
      "#{show_operand @this} #{@op.to_s} #{show_operand @that}"
    end
 
    private
    def show_operand(op)
      return "(#{op})" unless op.is_a? Index
 
      op.to_s
    end
  end
 
  class Index < Expr
    def initialize(idx)
      raise ArgumentError, "Invalid index: #{idx}" unless /^_\d+/ =~ idx
      @idx = idx.to_s.gsub('_', '').to_i - 1
    end
 
    def eval(digits)
      digits.fetch @idx
    end
 
    def to_s
      "_" + (@idx + 1).to_s
    end
  end
 
  refine Symbol do
    def method_missing(meth, *args)
      super if block_given?
      super unless args.size == 1
      super unless %i(+ - *).include? meth
 
      Index.new(self).send meth, Expr.create(args[0])
    end
  end
 
  refine Array do
    def each_solution(&block)
      Pattern.new(self).each(&block)
    end
  end
end
1
1 / 1 / 0
Регистрация: 14.09.2012
Сообщений: 10
07.02.2014, 19:41  [ТС] 6
Цитата Сообщение от arni Посмотреть сообщение
то это
Код Ruby
1
if q == s[2]
обречено на False
ну так и есть
Цитата Сообщение от Nameless One Посмотреть сообщение
Кстати, эта задача легко решается с помошью метода #each_solution:
не взлетает, ошибки на 18-й в строке (по вашей выделенному коду)



C:\ruby>ruby 777.rb
777.rb:123: unknown type of %string
return super unless %i(+ - *).include? meth
^
777.rb:123: syntax error, unexpected $end
return super unless %i(+ - *).include? meth
^

C:\ruby>
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
07.02.2014, 19:43 7
Версия Ruby? У меня 2.1.0.
0
1 / 1 / 0
Регистрация: 14.09.2012
Сообщений: 10
07.02.2014, 19:55  [ТС] 8
Цитата Сообщение от Nameless One Посмотреть сообщение
Версия Ruby? У меня 2.1.0.
ruby 1.9.3p0 (2011-10-30) [i386-mingw32]

попробую вашу
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
23.02.2014, 13:55 9
Может как-то так?
Ruby
1
2
3
4
5
6
7
1.upto(9) do |dig2| 
    1.upto(9) do |dig1| 
        0.upto(9) do |dig3| 
            print dig1, dig2, dig3, "\n"  if dig2 == (dig1 + dig3)
        end
    end
end
0
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 13
16.03.2014, 14:47 10
Ruby
1
(100..999).to_a.find_all {|i| (i-i%100)/100+i%10 == (i%100-i%10)/10}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
17.03.2014, 22:30 11
Цитата Сообщение от sv.SET Посмотреть сообщение
средняя цифра которых равна сумме первой и второй цифр
Это невозможное условие (кроме "000").. Хотя все подразумевают, что "средняя цифра которых равна сумме первой и третьей цифр", напишу еще один вариант, основанный на варианте выше..
Ruby
1
(100..999).to_a.find_all {|i| i % 10 + i / 100 % 10 == i / 10 % 10}
0
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 13
18.03.2014, 18:55 12
Цитата Сообщение от sv.SET Посмотреть сообщение
Необходимо выполнить задание "Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр."
При таком условии подходят только двузначные числа
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
18.03.2014, 20:56 13
Цитата Сообщение от Mis20 Посмотреть сообщение
При таком условии подходят только двузначные числа
а какая цифра у двузначных чисел является средней..?
0
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 13
23.03.2014, 20:53 14
Цитата Сообщение от KOPOJI Посмотреть сообщение
а какая цифра у двузначных чисел является средней..?
Подразумевались трехзначные числа, первая цифра которых - 0. Хотя при данном допущении подходят и однозначные числа.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.03.2014, 21:30 15
Цитата Сообщение от Mis20 Посмотреть сообщение
трехзначные числа
Цитата Сообщение от Mis20 Посмотреть сообщение
двузначные числа
"найдите 10 отличий"
0
23.03.2014, 21:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2014, 21:30
Помогаю со студенческими работами здесь

Найти все трехзначные числа,средняя цифра которых равна сумме первой и второй цифры
найти все трехзначные числа,средняя цифра которых равна сумме первой и второй цифры

Найти все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр
Написать код решения поставленной задачи. Решение представить в трех видах: 1) с помощью цикла for;...

Найти все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр
Помогите пожалуйста на ABC паскаль сделать задачу: Найти все трехзначные числа, средняя цифра...

Найти все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр
Найти все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр Sub...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru