Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 05.11.2014
Сообщений: 48

Изменение порядка и сложение

29.11.2014, 22:48. Показов 779. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача звучит так:
Функция изменения порядка на противоположный начинается с числа, меняет порядок на противоположный и складывает получившееся число с начальным. Если сумма не является полиндромом (т.е не дает одно и то же число прочитанная слева направо и справа налево), повторяем эту процедуру до тех пор, пока она им не станет.
Если за 500 итераций палиндром найти не удастся, вывести сообщение "Нет".
Входные данные
Первая строка содержет целое число N (0<N<=100), задающее число тестовых случаев, а каждая из следующих N строк содержит одно целое положительное число P, чей полиндром нужно найти.
Пример:
2
195
265
выходные данные:
Для каждого из N целых чисел вывести строку, содержащую минимальное число итераций, необходимых для нахождения палиндрома, один пробел и затем итоговый палиндром.
Пример:
4 9339
5 45254

Вот что я придумал:
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
#include <vcl.h>
#include <iostream.h>
#include <fstream.h>
#pragma hdrstop
 
#pragma argsused
int main(int argc, char* argv[])
{ char c;
int n,num1(0),flag,num2(0),num3(0),check(0),num4(0);
int * p1=new int [num1];
int * p2=new int [num2];
int * p3=new int [num3];
int * p4=new int [num4];
 
ifstream f("input.txt");
ofstream in("output.txt");
f>>n;
 
for (int j=0;j<n;j++)    //здесь считываем данные из файла
{
 
f.get(c); //пропускаем \n
for (int i=0;i<100;i++)
{
f.get(c);
if ((c=='\n') || (f.eof())) break;
p1[i]=StrToInt(c);
 num1++;
}
                //далее идет проверка на полиндромность
                for (int i=0;i<num1/2;i++)
                {
                if (p1[num1-1-i]==p1[i])
                flag=1;
                else {flag=0; break;}
                }
                if (flag==1)
                {
                in<<'0'<<' ';
                for (int i=0;i<num1;i++)
                { in<<p1[i]; cout<<p1[i];}
                }
//проверили, входим в цикл (0...500)
 
cout<<endl;
 
        for (int i=0;i<500;i++)  
        {
                for(int q=0;q<num1;q++)
                {
                p2[num1-1-q]=p1[q];
                }
                num2=num1;
 
                for (int q=0;q<num2;q++)
                {
                p3[num2-1-q+1]=p1[num1-1-q]+p2[num2-1-q]+check;
                if (p3[num2-1-q+1]>=10)  { p3[num2-1-q+1]-=10; check=1; }
                else  check=0;
                }
 
 
                if (check==1)
                { p3[0]=1; num4=num3=num2+1;
                for (int q=0;q<num4;q++)
                {p4[q]=p3[q]; }
                }
 
                else
                {p3[0]=0; num4=num3=num2;
                for (int q=0;q<num4;q++)
                {p4[q]=p3[q+1]; }
                }
 
 
                for (int q=0;q<num4;q++)
                
 
                        for (int z=0;z<num4/2;z++)
                        {
                        if (p4[num1-1-z]==p4[z])
                        flag=1;
                        else {flag=0; break;}
                        }
                        if (flag==1)
                        {
                        in<<i+1<<' ';
                        for (int z=0;z<num1;z++)
                        { in<<p4[i]; }
                        }
                //p1=p4, и по новой
                for (int z=0;z<num4;z++)
                p1[z]=p4[z];
        }
 
if (flag==0) cout<<"No";
 
}
f.close();
in.close();
cout<<endl;
system("pause");
        return 0;
}
Программа не работает правильно, похоже что-то не так с динамическими массивами, т.к. я блокировал разные части и проверял: данные в дин. массивы не записываются должным образом. Помогите пожалуйста разобраться
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2014, 22:48
Ответы с готовыми решениями:

Сложение и сравнение чисел. Показать изменение флагов
Составить программу, состоящую из трех частей. В первой части сложить первое и второе числа из последовательности входных данных в...

Изменение порядка
Добрый день. Задачка решается через for и if. В рождественский вечер на окошке стояло три цветочка, слева на право: герань, крокус и...

Изменение порядка строк
Помогите составить программу для изменения порядка строк в C++ для реализации в Linux int filikx (char*sF1, char*sF2) { FILE *F1, *F2; ...

2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.11.2014, 01:40
Я ничего не понимаю в динамических массивах, но задача решается в несколько строк и без них. Даже если вам в какой-то строке дадут число, не влезающее в лонг лонг. Только сложение свое написать в столбик и все.
0
0 / 0 / 1
Регистрация: 05.11.2014
Сообщений: 48
30.11.2014, 13:16  [ТС]
Первый раз с циклами намудрил, переделал (ошибка мне кажется не в дин. массивах, но я все равно пока их убрал):
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <fstream.h>
#pragma hdrstop
 
#pragma argsused
int main(int argc, char* argv[])
{ char c;
int n,num1(0),flag(0),num2(0),num3(0),check(0),num4(0);
/*int * p1=new int [num1];
int * p2=new int [num2];
int * p3=new int [num3];
int * p4=new int [num4];    */
int p1[5],p2[5],p3[5],p4[5];
 
ifstream f("input.txt");
ofstream in("output.txt");
f>>n;
 
for (int j=0;j<n;j++)    
{
 
f.get(c); 
for (int u=0;u<10;u++)
{
f.get(c);
if ((c=='\n') || (f.eof())) break;
p1[u]=StrToInt(c);
num1++;   cout<<p1[u];
}
 
cout<<endl;
 
        for (int i=0;i<4;i++)
        {
                for(int w=0;w<num1;w++)
                {
                p2[num1-1-w]=p1[w];
                }
                num2=num1;  cout<<endl<<num2<<endl;
 
                for (int q=0;q<num2;q++)
                {
                p3[num2-1-q+1]=p1[num1-1-q]+p2[num2-1-q]+check;
                if (p3[num2-1-q+1]>=10)  { p3[num2-1-q+1]-=10; check=1; }
                else  check=0;
                }
                cout<<check;
 
                if (check==1)
                { p3[0]=1; num4=num3=num2+1;
                for (int q=0;q<num4;q++)
                {p4[q]=p3[q]; }
                }
 
                else
                {p3[0]=0; num4=num3=num2;
                for (int q=0;q<num4;q++)
                {p4[q]=p3[q+1]; }
                }
                for (int q=0;q<num4;q++)
                cout<<p4[q];
                        //cout<<num4;
                        for (int z=0;z<num4/2;z++)
                        {
                        if (p4[num4-1-z]==p4[z])  flag=1;
                        else {flag=0; break;}   //cout<<flag<<endl;
                        }
 
                        if (flag==1)
                        {
                        in<<(i+1)<<' ';
                        for (int z=0;z<num4;z++)
                        { in<<p4[i]; }
                        }
                
                for (int z=0;z<num4;z++)
                {p1[z]=p4[z];} //cout<<p4[z];
                num1=num4;   cout<<endl;
        }
 
if (flag==0) cout<<"No";
 
}
f.close();
in.close();
cout<<endl;
system("pause");
        return 0;
}
Тестовый вариант, для входного файла брал число 195.На второй итерации вместо 1473 в p3 оказывается 11473...

Добавлено через 9 часов 58 минут
решил задачу, простите что побеспокоил зря
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.11.2014, 13:16
Помогаю со студенческими работами здесь

Изменение порядка слов
Доброго времени суток. С бд на страницу выводится список слов, например: ананас помидор огурец ..... Можно ли как-то сделать,...

Изменение порядка элементов
Дана действительная матрица размером MхN. Расположить элементы прямоугольной матрицы в противоположном порядке, причем сначала расположить...

Изменение порядка ОС в GRUB
Всем привет. Вот моя история: У меня стояла Windows 7. Услышал про Ubuntu и поставил ее как вторую Ос. Естественно Linux поставил себя...

Изменение порядка меню
QApplication app(argc, argv); QTextCodec *codec = QTextCodec::codecForName(&quot;Windows-1251&quot;); QWidget *form1 = new QWidget(); ...

Изменение порядка изображений
Вобщем ситуация такова. Есть TPanel на ней как фон идет изображение, в процессе работы на этот фон накидываются еще изображения. 1....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru