kutuz
Full Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Кхе, отыскал у друга забавную книженцию - Московские олимпиады по программированию, там за 1980 год (огого!) есть эта задачка, и вот её решение на С (есть ещё Басик, Паскаль и Фортран): Цитата: #include <stdio.h> #define MM 100 #define PECH for (i=0;i<m;i++) printf("%d ",A[P[i]]); \ putchar('\n'); int main() { int m,i,j,k,n,P[MM],A[MM]; B: printf("Vvedite cislo: 0<m<=%d \n",MM); scanf("%d",&m); if (m<=0 || m>MM) goto B; for (i=0;i<m;i++) { scanf("%d",&A[i]); P[i]=i; } PECH for(;;) { for (i=m-2;i>0;--i) if (P[i]<P[i+1]) goto R; return(0); R: n=P[i]; j=m-1; while (n>=P[j] && j>i) j--; P[i]=P[j];P[j]=n; for (k=1;i+k<m-k;k++){ n=P[i+k]; P[i+k]=P[m-k]; P[m-k]=n; } PECH } return(0); } | Конечно, не самый лучший вариант с goto, но если кому надо - переделаете...
---------- Учёные подсчитали, что человек живёт в интернете 3% своего времени. По-моему, что-то у них маловато получилось... |
|