Ruby/Практикум/Числа

Материал из Викиучебника

Перейти к: навигация, поиск

Содержание

[править] Числа

[править] Дано четырехзначное целое число. Необходимо проверить, является ли оно числом Армстронга.

Возможное решение:

n = 1234
b = n%10
c = n/10%10
d = n/100%10
e = n/1000
b**4 + c**4 + d**4 + e**4 == n

Замечания по решению:


Возможное решение:

n=1634
 
p n == n.to_s.split(//).inject(0){|s,e| s+e.to_f**4}

Замечания по решению:

[править] Идет k-я секунда года. Необходимо определить сколько полных месяцев и полных недель осталось до конца года.

Возможное решение:

k = 12312
s = 365*24*60*60
m = (s-k)/(30*24*60*60)
n = (s-k)/(7*24*60*60)

Замечания по решению: решение дано для задачи сколько полных месяцев или полных недель осталось до конца года исправить нетрудно(см. задачу 1.42) мой вариант(месяц=28 дней, в месяце 4 недели)

Возможное решение:

k=12312345
temp=(28*12*24*60*60-k)/24/60/60
puts "#{temp/7/4} полных месяцев и #{temp/7%4} полных недель"

[править] Даны два числа. Необходимо найти их среднее геометрическое.

Возможное решение:

Math.sqrt(x*y)

Замечания по решению:



[править] Дано целое шестизначное число. Необходимо определить, является ли оно счастливым.

Возможное решение:

# xyzabc -- шестизначное число
n = 123456
c = n%10
bc = n%100
b = bc/10
abc = n%1000
a = abc/100
zabc = n%10000
z = zabc/1000
yzabc = n%100000
y = yzabc/10000
x = n/100000
x+y+z == a+b+c

Замечания по решению:



Возможное решение:

# xyzabc -- шестизначное число
n = 123456
s = n.to_s
(s[0,1].to_i+s[1,1].to_i+s[2,1].to_i) == (s[3,1].to_i+s[4,1].to_i+s[5,1].to_i)

Замечания по решению:



Возможное решение:

n=123411
tmp=[]
n.to_s.split(//).each_slice(3){|e| tmp << eval(e.join('+'))}
p tmp.uniq.size==1

Замечания по решению:

Возможное решение:

n=237372
 
p (n/(10**((n.to_s.size)/2))).to_s.split("").map { |x|  x.to_i }.inject(0) { |sum,x| sum+x }==(n%(10**((n.to_s.size)/2))).to_s.split("").map { |x|  x.to_i }.inject(0) { |sum,x| sum+x }

Замечания по решению:


[править] Дано трехзначное число. Необходимо проверить, образуют ли цифры этого числа возрастающую последовательность.

Возможное решение:

b = 123
a = b%10
c = b%100/10
d = b/100
q = (a<c)
f = (c<d)
p(q&&f)

Замечания по решению:


Возможное решение:

x=546
a=x/100
b=x/10%10
c=x%10
(a<b)&&(b<c)

Замечания по решению:


Возможное решение:

p ((a/100)<(a/10%10))&&((a/10%10)<(a%10))

Замечания по решению:


Возможное решение:

n=123
m1=n.to_s.split(//)
p m1==m1.sort

Замечания по решению:

[править] Дано натуральное число меньшее 512. Необходимо проверить, является ли оно счастливым в двоичном представлении.

Возможное решение:

x = 165
(x[0] + x[1] + x[2] + x[3]).eql?(x[5] + x[6] + x[7] + x[8])

Замечания по решению:



[править] Даны координаты некоторой точки A (на плоскости). Необходимо найти расстояние от точки A до начала координат.

Возможное решение:

Math.sqrt(a**2+b**2)

Замечания по решению:



[править] Даны коэффициенты линейного уравнения: A и B . Необходимо найти корень этого уравнения.

Возможное решение:

a,b = 1,3
x = -b.to_f/a

Замечания по решению: команда .to_f(перевод в формат числа с плавающей точкой) использована для универсальности, потому что иначе мы получим только целочисленное деление, а коэффициент по заданию может оказаться с плавающей точкой

[править] Дано трехзначное число. Необходимо проверить, образуют ли цифры этого числа убывающую последовательность.

Возможное решение:

b=479
x=a/100
y=a/10%10
z=a%10
(x>y)&&(y>z)

Замечания по решению:


Возможное решение:

n=321
m1=n.to_s.split(//)
p m1==m1.sort.reverse

Замечания по решению:

[править] Дано четырехзначное число. Необходимо проверить, различны ли все четыре цифры этого числа.

Возможное решение:

a = 3456
b = a/10
c = a%10
d = b%10
e = b/10
g = e%10
n = e/10
p( (n!=g)&&(n!=d)&&(n!=c)&&(g!=d)&&(g!=c)&&(d!=c) )

Замечания по решению:


Возможное решение:

n=1524
m=n.to_s.split(//)
p m.uniq==m

Замечания по решению:

[править] Даны координаты двух полей шахматной доски. Необходимо определить, имеют ли эти поля одинаковый цвет.

Возможное решение:

x1,y1,x2,y2 = 1,2,3,4
((x1+x2+y1+y2)%2).zero?

Замечания по решению:



Возможное решение:

((x1+y1)%2).eql?((x2+y2)%2)

Замечания по решению:



[править] Дано трехзначное число. Необходимо определить есть ли среди цифр этого числа хотя бы две одинаковых.

Возможное решение:

b = 123
a = b%10
d = b%100/10
c = b/100
l = (a==d)
n = (d==c)
l || n

'Замечания по решению:'А где проверка (a==c)??



Возможное решение:

x=321
a=x/100
b=x/10%10
c=x%10
(a==b)||(b==c)||(a==c)

Замечания по решению:



Возможное решение:

n=121
p (n/100==n%10)||(n/100==n%100/10)||(n%100/10==n%10)

Замечания по решению:



Возможное решение:

n=121
p n.to_s.split(//).uniq.size < 3

Замечания по решению:

[править] Дано натуральное число меньшее 256. Необходимо найти сумму всех нечетных битов этого числа.

Возможное решение:

x[1]+x[3]+x[5]+x[7]

Замечания по решению:



[править] Идет k-я секунда суток. Необходимо определить сколько полных часов и полных минут прошло с начала суток.

Возможное решение:

h=k/3600
m=k%60

Замечания по решению:



[править] Дано целое число. Необходимо определить, является ли оно четным.

Возможное решение:

(a%2).zero?

Замечания по решению:


Возможное решение:

n[0].zero?

Замечания по решению:

[править] Даны три числа. Необходимо найти их среднее геометрическое.

Возможное решение:

(a*b*c)**Rational(1,3)

Замечания по решению:



[править] Даны координаты двух полей шахматной доски. Необходимо определить, может ли конь добраться из одного поля в другое за один ход.

Возможное решение:

(i1.abs<3)&&(i2.abs<3)&&(j1.abs<3)&&(j2.abs<3)&&((i1-i2).abs+(j1-j2).abs == 3)

Замечания по решению:



Возможное решение:

x1, x2, y1, y2 = 1, 2, 3, 4
p( ((x1 == x2-2) && (y1 == y2-1)) || 
((x1 == x2+2) && (y1 == y2-1)) || 
((x1 == x2+2) && (y1 == y2+1)) ||
((x1 == x2-2) && (y1 == y2+1)) || 
((x1 == x2-1) && (y1 == y2-2)) ||
((x1 == x2-1) && (y1 == y2+2)) ||
((x1 == x2+1) && (y1 == y2-2)) ||
((x1 == x2+1) && (y1 == y2+2)) )

Замечания по решению:


Возможное решение:

x1,y1,x2,y2=1,5,3,6
p Math.sqrt((x1-x2)**2+(y1-y2)**2)==Math.sqrt(5)

Замечания по решению:

[править] Даны коэффициенты квадратного уравнения: A, B и С. Необходимо найти корни этого уравнения.

Возможное решение:

a = 5
b = 6
c = 10
d = b**2 - 4*a*c
p x1 = (-b + d**Rational(1,2)) / (2*a)
p x2 = (-b - d**Rational(1,2)) / (2*a)

Замечания по решению:



[править] Дано целое четырехзначное число. Необходимо проверить является ли оно счастливым.

Возможное решение:

a = 6455
b = a/10
c = a%10
d = b%10
e = b/10
g = e%10
n = e/10
( n+g ).eql?( d+c )

Замечания по решению:


Возможное решение:

a=5234
puts ((a.to_s[0].to_i+a.to_s[1].to_i)==(a.to_s[2].to_i+a.to_s[3].to_i))

Замечания по решению:

[править] Даны координаты трех полей шахматной доски. Необходимо определить, имеют ли эти поля одинаковый цвет.

Возможное решение:

x1,x2,x3,y1,y2,y3 = 1,2,4,2,3,5
a = (x1+y1)[0]
b = (x2+y2)[0]
c = (x3+y3)[0]
(a == b)&&(b == c)&&(c == a)

Замечания по решению:


Возможное решение:

x1,x2,x3,y1,y2,y3=1,4,2,7,4,6
p (x1+x2+y1+y2)[0]==(x1+x3+y1+y3)[0]

Замечания по решению:

[править] Даны коэффициенты биквадратного уравнения: A, B и С. Необходимо найти корни этого уравнения.

Возможное решение:

d=(b**2)-(4*a*c)
t1=-b+Math.sqrt(d)
t2=-b-Math.sqrt(d)
x1=-Math.sqrt(t1)
x2=Math.sqrt(t1)
x3=-Math.sqrt(t2)
x4=Math.sqrt(t2)

Замечания по решению:



Возможное решение:

a = 2; b = 4; c = 8
d = b**2 - 4*a*c
t1 = (-b + Math.sqrt(d)) / (2*a)
t2 = (-b - Math.sqrt(d)) / (2*a)
x1 = -Math.sqrt(t1);
x2 = Math.sqrt(t1);
x3 = -Math.sqrt(t2);
x4 = Math.sqrt(t2);

Замечания по решению:



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

Возможное решение:

a = 12345
b = a%10
c = a/10%10
d = a/100%10
e = a/1000%10
f = a/10000
f*10000 + e*1000 + d*100 + c*10 + b

Замечания по решению:


Возможное решение:

s=12345
s.to_s.reverse.to_i

Замечания по решению:

[править] Дано пятизначное число. Необходимо проверить, образуют ли цифры этого числа, стоящие на нечетных позициях, возрастающую последовательность.

Возможное решение:

x = 63517
a = x/10000
b = x/1000 - a*10
c = x/100 - (a*100 + b*10)
d = x/10 - (a*1000 + b*100 + c*10)
e = x - (a*10000 + b*1000 + c*100 + d*10)
p( (a < c)&&(c < e) )

Замечания по решению:


Возможное решение:

a=12243
p (a/10000<a/100%10)&&(a/100%10<a%10)

Замечания по решению:

[править] Дано натуральное число меньшее 256. Необходимо проверить, равенство первых и последних 4 бит этого числа.

Возможное решение:

(x[0]==x[4])&&(x[1]==x[5])&&(x[2]==x[6])&&(x[3]==x[7])

Замечания по решению:



[править] Дано четырехзначное число. Необходимо определить есть ли среди цифр этого числа хотя бы две одинаковых.

Возможное решение:

x = 1234
a = x/1000
b = x/100%10
c = x%100/10
d = x%10
a==b || b==c || c==d || a==d || b==d || a==c

Замечания по решению:


Возможное решение:

x = 1652
p x.to_s.split("")!=x.to_s.split("").uniq

Замечания по решению:


[править] Дано натуральное число меньшее 256. Необходимо найти сумму всех четных битов этого числа.

Возможное решение:

(x&2**0)+(x&2**2)+(x&2**4)+(x&2**6)

Замечания по решению: не очень понятно, что искалось?


Возможное решение:

a=143
p a[0]+a[2]+a[4]+a[6]

Замечания по решению:

[править] Даны коэффициенты биквадратного уравнения: A, B и С. Необходимо найти произведение корней этого уравнения.

Возможное решение:

a,b,c = 1,-4,1
d = b**2 - 4*a*c
z1 = (-b-Math.sqrt(d))/(2*a)
z2 = (-b+Math.sqrt(d))/(2*a)
x1 = Math.sqrt(z1)
x2 = -Math.sqrt(z1)
x3 = Math.sqrt(z2)
x4 = -Math.sqrt(z2)
p x1,x2,x3,x4

Замечания по решению:


Возможное решение:

A,B,C=1,-7,12
p C

Замечания по решению:

[править] Дано натуральное число меньшее 16. Необходимо проверить, является ли оно двоичным полиндромом.

Возможное решение:

x = 14
(x[0] == x[3]) && (x[1] == x[2])

Замечания по решению:



Возможное решение:

x = 15
p( (x[0]==x[3])&&(x[1]==x[2]) )

Замечания по решению:


Возможное решение:

a=9.to_s(2)
p a==a.reverse

Замечания по решению:

[править] Даны координаты двух полей шахматной доски. Необходимо определить, может ли слон добраться из одного поля в другое за один ход.

Возможное решение:

x1, x2, y1, y2 = 1, 2, 3, 4
p( (x1-x2).abs == (y1-y2).abs )

Замечания по решению:



Возможное решение:

a1=1; a2=4; b1=3; b2=2
p( (b1-a1).abs==(b2-a2).abs )

Замечания по решению:


[править] Даны три числа. Необходимо найти их среднее арифметическое.

Возможное решение:

a=3
b=4
c=6
p (a+b+c)/3.0

Замечания по решению: Если вместо 3.0 будет просто 3, выводиться как среднее арифметичское будет 4. Правильный ответ 4.(3)

[править] Дано трехзначное число. Необходимо определить есть ли среди цифр этого числа ровно две одинаковых.

Возможное решение:

x = 121
a=x/100; b=x/10%10; c=x%10
p ((b==a)&&(b!=c)&&(c!=a))||((b==c)&&(b!=a)&&(c!=a))||((a==c)&&(a!=b)&&(c!=b))

Замечания по решению:


Возможное решение:

x = 911
a = x/100
b = x/10%10
c = x%10
p( ((a==b)&&(a!=c)&&(b!=c))||((b==c)&&(a!=c)&&(a!=b))||((a==c)&&(a!=b)&&(b!=c)) )

Замечания по решению:


Возможное решение:

n=121
m=n.to_s.split(//)
p m.uniq.size == 2

Замечания по решению:

[править] Дано четырехзначное целое число. Необходимо проверить, является ли оно счастливым.

Возможное решение:

a = 1234
b = a%10
c = a/10
e = c%10
d = c/10
g = d%10
m = d/10
(m + g) == (e + b)

Замечания по решению:



Возможное решение:

d=3214
a=d/1000
b=d/100-a*10
c=d/10-(a*100+b*10)
r=d-(a*1000+b*100+c*10)
a+b==c+r

Замечания по решению:



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

Возможное решение:

m=123
a=m/100
b=(m-a*100)/10
c=(m-a*100-b*10)
p (c*100)+(b*10)+a

Замечания по решению:


Возможное решение:

d=123
a=d/100
b=d/10-a*10
c=d-(a*100+b*10)
c*100+b*10+a

Замечания по решению:


Возможное решение:

n=123
p n.to_s.split(//).reverse.to_s.to_i

Замечания по решению:

[править] Дано четырехзначное целое число. Необходимо проверить, является ли оно палиндромом.

Возможное решение:

n = 1234
a = n/1000
b = (n/100)%10
c = (n/10)%10
d = n%10
(a == d) && (b == c)

Замечания по решению:



Возможное решение:

x=1234
a=x/1000
b=x/100-a*10
c=x/10-(a*100+b*10)
d=x-(a*1000+b*100+c*10)
(a==d)&&(b==c)

Замечания по решению:

[править] Дано натуральное число меньшее 256. Необходимо проверить, является ли оно счастливым в двоичном представлении.

Возможное решение:

x=165
( x[0]+x[1]+x[2]+x[3] ).eql?( x[4]+x[5]+x[6]+x[7] )

Замечания по решению:



Возможное решение:

a[0]+a[1]+a[2]+a[3]==a[4]+a[5]+a[6]+a[7]

Замечания по решению:



Возможное решение:

a=255
a[0]+a[1]+a[2]+a[3] == a[4]+a[5]+a[6]+a[7]

Замечания по решению:



[править] Даны три числа. Необходимо проверить, образуют ли они убывающую последовательность.

Возможное решение:

a=1
b=5
c=10
p (a>b)&&(b>c)

Замечания по решению:



[править] Дано шестизначное целое число. Необходимо проверить, является ли оно палиндромом.

Возможное решение:

d = 324156
a = d/100000
b = d/10000 - a*10
c = d/1000 - (a*100 + b*10)
e = d/100 - (a*1000 + b*100 + c*10)
f = d/10 - (a*10000 + b*1000 + c*100 + e*10)
g = d - (a*100000 + b*10000 + c*1000 + e*100 + f*10)
p(d == g*100000 + f*10000 + e*1000 + c*100 + b*10 + a)

Замечания по решению:



[править] Дано целое пятизначное число. Необходимо проверить, является ли оно полиндромом.

Возможное решение:

n = 12345
a = x/10000
b = x/1000%10
c = x%100/10
d = x%100/10
e = x%10
a==e || b==d

Замечания по решению:



[править] Даны три числа. Необходимо проверить, есть ли среди них хотя бы два одинаковых.

Возможное решение:

((a==b)or(b==c)or(c==a))

Замечания по решению:



Возможное решение:

(a==b)||(b==c)||(c==a)

Замечания по решению:



[править] Даны длины катетов прямоугольного треугольника. Необходимо найти длину гипотенузы.

Возможное решение:

a,b = 3,2
Math.sqrt(a**2 + b**2)

Замечания по решению:

[править] Идет k-я секунда суток. Необходимо определить сколько полных часов и полных минут осталось до конца суток.

Возможное решение:

k = 70000
x = 24*3600
t = x-k
h = t/3600
m = t%3600/60
p h.to_s + ':' + m.to_s

Замечания по решению:



Возможное решение:

k=5040
b=86400-k
p b/3600
c=b%3600
p c/60

Замечания по решению: