Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
 Аватар для Goffrua
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80

Число, переходящее само в себя, - постоянная Капрекара

05.04.2015, 19:49. Показов 7828. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Не получается решить задачку!
Возьмем четырехзначное число, в котором не все цифры одинаковы, например 6264. Расположим цифры сначала в порядке убывания - 6642; затем, переставив их в обратном порядке, получим 2466. Вычтем последнее число из 6642. На следующем шаге с полученной разностью проделаем тоже самое. Через несколько таких действий получится число, переходящее само в себя и называемое постоянной Капрекара. Требуется написать программу, которая находит эту постоянную и количество шагов для ее получения из заданного четырехзначного числа. Вводится четырёхзначное число, выводится число, получившееся после преобразований (всегда 6174) и кол-во преобразований.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
#include<cstdio>
#include<stdlib.h>
using namespace std;
int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int o;
    string s, t, d;
    int atoi(string s);
    for (int i = 0; s != 6174; i++) {
        t = sort(s[0], s[3]);
        d = sort(s[0], s[3], comp);
        int atoi(string t);
        int atoi(string d);
        s = d - t;
        _itoa(int s);
    }
    cout << 6174 << i;
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2015, 19:49
Ответы с готовыми решениями:

Постоянная Капрекара.
Не понятны входные данные. Добавлено через 23 минуты Решение : #include &lt;iostream&gt; #include &lt;vector&gt; #include...

Постоянная Капрекара
Нужна программа, которая определяет количество этапов, которые нужно выполнить что бы получить постоянную Капрекара. Первоначальное число...

Постоянная Капрекара
Возьмем четырехзначное число, в котором не все цифры одинаковы, например 6264. Расположим цифры сначала в порядке убывания - 6642; затем,...

55
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
07.04.2015, 21:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Байт Посмотреть сообщение
разобрать именно "методом карандашика"
так я ж не отказываю этому методу
я против огульного использования, когда весь листинг с карандашиком
а так, сам часто пользуюсь в узких местах, особенно рекурсия когда выпендривается
0
07.04.2015, 21:56

Не по теме:

Может я чего-то не понял, но все же...

Цитата Сообщение от Goffrua Посмотреть сообщение
Возьмем четырехзначное число, в котором не все цифры одинаковы, например 6264
Шаг 1: Возьмем 9998 - не все цифры одинаковы.
Шаг 2: Получим 8999.
Шаг 3: 9998 - 8999 = 999 и что с этим делать??? :scratch:

0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
07.04.2015, 22:49
mat_for_c, хороший вопрос.
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
07.04.2015, 23:12
аналогично для 1112 и 2111
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
08.04.2015, 09:26
Цитата Сообщение от mat_for_c Посмотреть сообщение
Шаг 3: 9998 - 8999 = 999 и что с этим делать???
продолжать, нули сохранять

9998 - 8999 = 999 (9990,0999)
9990 - 0999 = 8991 (9981,1899)
9981 - 1899 = 8082 (8820,0288)
8820 - 0288 = 8532 (8532,2358)
8532 - 2358 = 6174 (7641,1467)
6174


с этим что-то еще можно сделать?

Добавлено через 1 минуту
Из Википедии
Производя перестановки цифр и вычитания, нули следует сохранять.
2
 Аватар для Goffrua
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
08.04.2015, 22:41  [ТС]
Добрый вечер!

Два дня бьюсь . Мои знания на исходе. Уж как не проверяла, всё-равно не идёт. Составила блок-схему, ниже по ней последняя версия программы:
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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
using namespace std;
int main() {
char str[20];
scanf_s("%s", &str[0]);
int i=0, y=0, z=0, k=0;
 
k=strlen(str);   
 
y = atoi(str);  
for( ; y!=6174; z++) {
for(i=k-1;i>0;i--) { 
for(intj=0;j<i;j++)
if(str[j]>str[j+1])
{
inttt = str[j]; 
str[j] = str[j+1];
str[j+1] = tt;
}
 
} 
 
intM = atoi(str); 
printf("Poslesortirovkipovozrastaniy: %d\n", M);
 
intt = M; 
intr = 0;
while (t != 0)
{
r = r * 10 + t % 10;
t /= 10;// тоже самое, что и t=t/10; 
}
printf("Poslesortirovkipoybivaniy: %i\n", r);
y=r-M;
printf("Raznost: %i\n", y);
 
}
 
printf("Itog: %i", 6174);
 
printf("%i\n",  z);
system("pause");
return 0;
}
Гляньте, пожалуйста! Где у меня ошибка?
Миниатюры
Число, переходящее само в себя, - постоянная Капрекара  
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
08.04.2015, 22:57
Цитата Сообщение от Goffrua Посмотреть сообщение
inttt = str[j];
надеюсь этой опечатки нет в программе?
и кстати не одна она
Цитата Сообщение от Goffrua Посмотреть сообщение
intt = M;
intr = 0;
Цитата Сообщение от Goffrua Посмотреть сообщение
y = atoi(str); *
for( ; y!=6174; z++)
Цитата Сообщение от Goffrua Посмотреть сообщение
y=r-M;
printf("Raznost: %i\n", y);
а где ты y превращаешь опять в строку? веди сортировка то идет строки!!!
нужно что то типа
C++
1
sprintf(str,"%.4d",i);
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
09.04.2015, 00:46
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
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
using namespace std;
 
int main (void){
 
    const int N=5;      //5 символ - признак окончания строки
    int k=0;            //Эту переменную используем для цикла и одновремнно для подсчета шагов
 
    char str[N]="";       //Исходное число в str, ниже str1 и str2 вспомогательные - отсортированные
    gets(str);
    str[N-1]='\0';
 
    char str1[N],str2[N];         //Вспомогательные будут отсортированы
 
for (k=0;k<7;k++){         // можно Не более чем за 7 шагов (так в википедии пишут)
    strcpy(str1,str);       //В str1 записали начальное для его сортровки
  
 /*Сортировка по  убыванию*/
   for (int i=1;i<N;i++){
    for (int j=0;j<N-1;j++){
        if (str1[i]>str1[j]) swap(str1[i],str1[j]);
    }
   }
/*теперь в str1 число собранное из цифр по убыванию*/
//можно не сортировать снова
//Число 4-х значное можно и напрямую повтыкивать. Быстрее чем сортировка (операций меньше)
   for (int i=0;i<4;i++) str2[i]=str1[N-2-i];
   str2[N-1]='\0'; //ПРизнак конца строки
/*
   в цикле происходит вот это:
   str2[0]=str1[3];
   str2[1]=str1[2];
   str2[2]=str1[1];
   str2[3]=str1[0];
   после цикла
   str2[4]='\0'; //Конец строки - признак конца строки
*/
 
 
    int x=atoi(str1)-atoi(str2);  //Разность двух полученных чисел
 
   strcpy(str,"0000"); //Для сохранения нулей
 
 //Собираем str из полученной разности
   str[3]=x%10+48;  //48 - это ASCII код нуля, чтобы привести число к строке есть itoa, но оно не стандарт
   str[2]=x/10%10+48; //поэтому таким не казистым способом, прибавляя 48 к числу
   str[1]=x/100%10+48; //и приводя это к char
   str[0]=x/1000%10+48; //приведение происходит неявно, но т.к. присваивание в char, то оно есть
 
cout<<"== "<<str<<" ==\n"; //Выводим на экран текущую разность
 if (!strcmp("6174",str)) break; //Если текущая разность равна постоянной, выходим из цикла
} //for k
 
cout<<"Count steps = "<<k+1<<"\n"; //Сообщаем результат
 
 return 0;
}

Не по теме:

//Собираем str из полученной разности
Это там число разбивается таким образом, чтобы получать его цифры по одной

1
09.04.2015, 01:54

Не по теме:

Посмотрел на объемы кода и решил тоже попускать пузырьки :)

Haskell
1
2
3
task n i = if n' == n then (n, i) else task n' (i+1) where
    n' = read (take 4 $ reverse s ++ "0000") - read s
    s  = sort $ show n

0
 Аватар для Goffrua
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
09.04.2015, 07:12  [ТС]
ValeryS, daslex, _Ivana, спасибо, что "не прошли мимо"!

ValeryS, в программе ничего не слеплено. Только что проверила.
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
09.04.2015, 07:47
Решение задачи на постоянную Капрекару
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
09.04.2015, 08:32
Цитата Сообщение от Goffrua Посмотреть сообщение
в программе ничего не слеплено. Только что проверила.
надеюсь иначе была бы ошибка компиляции
0
 Аватар для Goffrua
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
10.04.2015, 21:17  [ТС]
Всем добрый вечер!
daslex, супер, Ваша программа прошла с 1 раза! Я "сплагиатила" у Вас кусочек проги :
Цитата Сообщение от daslex Посмотреть сообщение
C
1
strcpy(str,"0000"); //Для сохранения нулей
Цитата Сообщение от ValeryS Посмотреть сообщение
а где ты y превращаешь опять в строку? веди сортировка то идет строки!!!
нужно что то типа

C++
1
sprintf(str,"%.4d",i);
ValeryS, точно, прошляпила..


И всё-таки пытаюсь добить программу в своей редакции, первоначальной. Практически всё считает, осталось поудалять лишнее, чтобы решение покороче было.
Пока я борюсь...

Добавлено через 23 часа 14 минут
ValeryS, gunslinger, _Ivana, daslex, Байт, mat_for_c, Day, nmcf, hoggy, zss, senyaarseniy, S_el, благодарю за поддержку!

Всем спасибо, кто помогал мне! Программа составлена! Я её столько раз переделывала, редактировала, меняла, что теперь могу её написать даже с закрытыми глазами . У меня всё получилось только благодаря вам!


Не по теме:

P.S. пойду ещё сложные задачки выбирать, чтобы не уходить от вас)

3
10.04.2015, 22:33

Не по теме:

Цитата Сообщение от Goffrua Посмотреть сообщение
Я её столько раз переделывала, редактировала, меняла, что теперь могу её написать даже с закрытыми глазами
У Николая Гумилева есть на этот счет маленький стишок.
Мальчик, мальчик, как ты весел! Как светла твоя улыбка!
Не проси об этом счастье, отравляющем миры.
Ты не знаешь, ты не знаешь, что такое - эта скрипка,
Что такое - тихий ужас начинателя игры.
Тот, кто взял ее однажды в повелительные руки,
Для того пропал навеки безмятежный свет очей.
Духи ада любят слушать эти царственные звуки,
Бродят бешеные волки по дорогам скрипачей
...
...
Мальчик, мальчик, не ищи там ни утехи, ни сокровищ!
Но я вижу - ты смеешься? Твои взгляды - два луча!
На! - владей волшебной скрипкой! Посмотри в глаза чудовищ.
И погибни страшной смертью - славной смертью скрипача!

0
10.04.2015, 23:01  [ТС]

Не по теме:

Цитата Сообщение от 8-BITOV Посмотреть сообщение

Не по теме:

У Николая Гумилева есть на этот счет маленький стишок.
Мальчик, мальчик, как ты весел! Как светла твоя улыбка!
Не проси об этом счастье, отравляющем миры.
Ты не знаешь, ты не знаешь, что такое - эта скрипка,
Что такое - тихий ужас начинателя игры.
Тот, кто взял ее однажды в повелительные руки,
Для того пропал навеки безмятежный свет очей.
Духи ада любят слушать эти царственные звуки,
Бродят бешеные волки по дорогам скрипачей
...
...
Мальчик, мальчик, не ищи там ни утехи, ни сокровищ!
Но я вижу - ты смеешься? Твои взгляды - два луча!
На! - владей волшебной скрипкой! Посмотри в глаза чудовищ.
И погибни страшной смертью - славной смертью скрипача!

Это точно! :good:

0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 2
25.05.2016, 18:37
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
#include <iostream>
#include <conio.h>
#include<windows.h>
using namespace std;
 
int main()
{
  
    int x;
    int n=0;
      int y;
 
   int num1, a,
       num2, b,
       num3, c,
       num4, d;
 
   cout<<"  Enter Number Format - ####:  ";
   cin>>num1;
  while(num1!=6174)
  {
      a = num1 / 1000;
      num2 = num1 % 1000;
      b = num2 / 100;
      num3 = num2 % 100;
      c = num3 / 10;
      num4 = num3 % 10;
      d = num4 / 1;
      
      
    do  
      {
      if(a<b)
      {
      x=a;
      a=b;
      b=x;
      }
      if(b<c)
      {
      x=b;
      b=c;
      c=x;
      }
      if(c<d)
      {
      x=c;
      c=d;
      d=x;
      }
      }
       while((a<b)||(b<c)||(c<d));
      cout<<"  Res:  "<<a<<b<<c<<d<<endl;
      num2=a*1000+b*100+c*10+d;
      num3=d*1000+c*100+b*10+a;
      num1=num2-num3;
      cout<<" "<<num2<<" - "<<num3<<" = "<<num1<<endl;
      n++;
      }
      cout<<"  Res:  6174"<<endl;
      cout<<" 7641 - 1467 = 6174"<<endl;
      cout<<n<<endl;
      getch();
   return 0;
}
Вроде работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2016, 18:37

Постоянная Капрекара
Здравствуйте, помогите, пожалуйста с последней функцией kaprekar_loop. Задание с ресурса Степик, первые две функции «numerics(n)» и...

Проверить простое ли число? (число называется простым, если оно делится только само на себя и на 1)
Проверить простое ли число? (число называется простым, если оно делится только само на себя и на 1) Используя только циклы

Является ли введенное число с клавиатуры простым т. е. делится только на само себя и еденицу
Помогите пожалуйста. Является ли введенное число с клавиатуры простым т. е. делится только на само себя и еденицу.

Найти сумму простых чисел до N простое число, которое делится только на 1 и на само себя
Задано целое число N. Найти сумму простых чисел до N. простое число, которое делиться только на 1 и на самого себя

Составить процедуру, определяющую является ли заданное число простым, т.е. делящимся только на 1 и на само себя
Помогите написать программу &quot;Составить процедуру, определяющую является ли заданное число простым, т.е. делящимся только на 1 и на само...


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

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru