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

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

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

Author24 — интернет-сервис помощи студентам
Задача звучит так:
Функция изменения порядка на противоположный начинается с числа, меняет порядок на противоположный и складывает получившееся число с начальным. Если сумма не является полиндромом (т.е не дает одно и то же число прочитанная слева направо и справа налево), повторяем эту процедуру до тех пор, пока она им не станет.
Если за 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2014, 22:48
Ответы с готовыми решениями:

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

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

Изменение порядка строк
Помогите составить программу для изменения порядка строк в C++ для реализации в Linux int filikx...

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

2
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
30.11.2014, 01:40 2
Я ничего не понимаю в динамических массивах, но задача решается в несколько строк и без них. Даже если вам в какой-то строке дадут число, не влезающее в лонг лонг. Только сложение свое написать в столбик и все.
0
0 / 0 / 1
Регистрация: 05.11.2014
Сообщений: 48
30.11.2014, 13:16  [ТС] 3
Первый раз с циклами намудрил, переделал (ошибка мне кажется не в дин. массивах, но я все равно пока их убрал):
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
30.11.2014, 13:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2014, 13:16
Помогаю со студенческими работами здесь

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

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

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

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


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

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