29.08.2010, 11:23 | #1 |
Новичок
|
Решение проблем в программировании
Код:
#include <stdio.h> #include <math.h> #include <algorithm> using namespace std; struct coord { double x, y; }; struct point { coord t; point *next; }; coord a[100]; int main () { int n, i, j, maxn, minn; double min, max; freopen("input.txt", "rw", stdin); freopen("output.txt", "wt", stdout); scanf("%d", &n); scanf("%lf%lf", &a[0].x, &a[0].y); min = a[0].y; max = min; maxn = minn = 0; for (i = 1; i < n; i++) { scanf("%lf%lf", &a[i].x, &a[i].y); if (a[i].y > max) { max = a[i].y; maxn = i; } if (a[i].y < min) { min = a[i].y; minn = i; } } point.t = a[maxn]; } <<point.t = a[maxn];>> вылетает <<error C2143: синтаксическая ошибка: отсутствие ";" перед ".">> причём, 2 раза. |
07.10.2010, 18:30 | #4 |
Модератор
|
Помогите плз с задачей. Не могу понять почему стопится выполение
Задача
Натуральное число называется палиндромом, если оно читается одинаково с обеих сторон, например, 171. Возьмём любое число. Если оно не палиндром, то перевернем его и сложим с исходным. Если не получится палиндром, то проделаем с ним то же и т.д. пока не получится палиндром. Для всех чисел от 100 до 200 найти, через сколько шагов получится палиндром и какой. Что получилось у меня
Код:
# include<iostream> # include<math.h> int pere(int x) { int i,imax,y, mas[100],z; for (i=0; x>0; i++) { mas[i]=x%10; x/=10; } imax=i-1; for(z=pow(10,imax),i=0,y=0; i<=imax; z/=10,i++) { y+=mas[i]*z; } return(y); } using namespace std; int palin(int x ){ int i,j, m[1000]; for (i=0; x>0; i++) { m[i]=x%10; x/=10; } i=i-1; for (j=i,i=0;i<j; i++,j--) { if (m[i] != m[j]) return 0; } return 1; } int main() { int ch,i,sum; for(ch=100; ch<=200; ch++) { cout<<ch; if (palin(ch)==1) cout<<" palindrom\n"; else { i=0; sum=ch; while (palin(sum)==0) { sum=ch+pere(sum); i++; } cout<<" "<<sum; cout<<" kol_shagov - "<<i<<endl; } } } Выводит до 161, 162 уже почему-то не пишет
Код:
100 101 kol_shagov - 1 101 palindrom 102 303 kol_shagov - 1 103 404 kol_shagov - 1 104 505 kol_shagov - 1 105 606 kol_shagov - 1 106 707 kol_shagov - 1 107 808 kol_shagov - 1 108 909 kol_shagov - 1 109 121 kol_shagov - 3 110 121 kol_shagov - 1 111 palindrom 112 323 kol_shagov - 1 113 424 kol_shagov - 1 114 525 kol_shagov - 1 115 626 kol_shagov - 1 116 727 kol_shagov - 1 117 828 kol_shagov - 1 118 929 kol_shagov - 1 119 414 kol_shagov - 62 120 141 kol_shagov - 1 121 palindrom 122 343 kol_shagov - 1 123 444 kol_shagov - 1 124 545 kol_shagov - 1 125 646 kol_shagov - 1 126 747 kol_shagov - 1 127 848 kol_shagov - 1 128 949 kol_shagov - 1 129 828 kol_shagov - 35 130 161 kol_shagov - 1 131 palindrom 132 363 kol_shagov - 1 133 464 kol_shagov - 1 134 565 kol_shagov - 1 135 666 kol_shagov - 1 136 767 kol_shagov - 1 137 868 kol_shagov - 1 138 969 kol_shagov - 1 139 161 kol_shagov - 10 140 181 kol_shagov - 1 141 palindrom 142 383 kol_shagov - 1 143 484 kol_shagov - 1 144 585 kol_shagov - 1 145 686 kol_shagov - 1 146 787 kol_shagov - 1 147 888 kol_shagov - 1 148 989 kol_shagov - 1 149 505 kol_shagov - 10 150 252 kol_shagov - 2 151 palindrom 152 1111 kol_shagov - 103 153 585 kol_shagov - 24 154 5555 kol_shagov - 10 155 22122 kol_shagov - 53 156 7557 kol_shagov - 121 157 686 kol_shagov - 40 158 383 kol_shagov - 36 159 393 kol_shagov - 9 160 282 kol_shagov - 2 161 palindrom |
08.10.2010, 03:30 | #5 |
Пользователь
|
подозреваю, что в 46 строке
Код:
sum=ch+pere(sum); Код:
sum=sum+pere(sum); 162+261=423 . 423 - не палиндром. Дальше производим операцию над числом 423 423+324=747 747 - палиндром. У вас же первое слагаемое всё время исходное число 162.
__________________
Gentoo user Последний раз редактировалось zhekas; 08.10.2010 в 03:36. |
Благодарности: 1 | SoaT (08.10.2010) |
08.10.2010, 09:50 | #6 | ||||||||||||||||||||||||
Модератор
|
zhekas, ты пробовал откомпилить и запустить? У меня на g++ 4.4.5 стопится. И на винде в VS 6.0 (синтаксис изменялся само-собой) тоже стопится. Последний раз редактировалось SoaT; 08.10.2010 в 09:51. |
||||||||||||||||||||||||
08.10.2010, 16:23 | #9 |
Пользователь
|
Боюсь, что они длиннее чем вы думаете. И замена даже на long их не спасает. Хотя вру. у меня просто int и long -это один и тот же тип.
Хотя sum вполне может перескакивать через максимальное значение, И получится не правильный ответ.
__________________
Gentoo user Последний раз редактировалось zhekas; 08.10.2010 в 16:46. |
08.10.2010, 18:32 | #11 |
Пользователь
|
За счет того что unsigned всегда положительный вы могли и не заметить перехода за максимальное значение.
Более того с помощью отладчика gdb можно заметить, что для ch=196 при i=30 sum меняется с sum=3121672202 на sum=849466119 То есть sum уменьшилась. А этого не может быть sum может только возрастать. Значит sum перескочило через максимальное значение
__________________
Gentoo user Последний раз редактировалось zhekas; 08.10.2010 в 18:50. |
Благодарности: 1 | SoaT (08.10.2010) |
09.10.2010, 02:38 | #13 |
Пользователь
|
В принципе, тут надо работать не с числами а с массивом разрядов (тем более вы и так сначала преобразуете число в массив разрядов, а потом обратно). От этого массива требуется только операция сложения, что достаточно просто.
Число 196 После 48150 шагов так и не преобразовалось в палиндром. sum имеет 20000 знаков, С остальными числами всё в порядке. Числа 177 и 187 обрели свои настоящие палиндромы. Добавлено через 1 час 10 минут Код:
# include<iostream> # include<math.h> const int m=20000; int sum[m],n; int pere() { int i,p, mas[m]; for (i=0; i<n; i++) { mas[i]=sum[i]; } p=0; for(i=0;i<n;i++) { sum[i]=(mas[i]+mas[n-1-i]+p)%10; p=(mas[i]+mas[n-1-i]+p)/10; } if (p!=0) { sum[n]=p; n=n+1; } return 0; } using namespace std; int palin(){ int i,j; for (j=n-1,i=0;i<j; i++,j--) { if (sum[i] != sum[j]) return 0; } return 1; } int main() { int ch,i,j; for(ch=100; ch<=200; ch++) { cout<<ch; sum[0]=ch%10; sum[1]=(ch%100)/10; sum[2]=ch/100; n=3; if (palin()==1) cout<<" palindrom\n"; else { i=0; while ((palin()==0)&(n<m)) { pere(); i++; } cout<<" "; if (n>=m) cout<<" ne_nashel "; else for (j=n-1;j>=0;j--) cout<<sum[j]; cout<<" kol_shagov - "<<i<<endl; } } }
__________________
Gentoo user Последний раз редактировалось zhekas; 09.10.2010 в 03:20. |
Благодарности: 1 | SoaT (15.10.2010) |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
COD4: Решение возникающих проблем | Hirurg | Call Of Duty 4 | 1132 | 22.01.2018 01:11 |
Решение проблем | MDM | Mozilla Firefox | 1244 | 21.01.2018 17:22 |
CoD2: Решение проблем | aurea | Call Of Duty 2 | 1535 | 17.06.2013 03:43 |
COD5: Решение возникающих проблем | MDM | Call Of Duty 5 | 23 | 05.04.2010 16:30 |
FEAR: Решение проблем | MDM | F.E.A.R. | 265 | 06.01.2010 18:38 |