全班有N个人(2<=N<=45)排成一排,因为高矮不同需要调整。方法是:不调换左右位置,只让后退一步变成第二排,使第一排留下的人从左到右按降序排列。如果第二排不整齐也同样排序产生第三 排,直到都降序排列。调整时须找出一种使第一排留下尽可能多的人,调整第二排时也尽可能使最多的人留下,依次类推。
输入:总人数、每人的身高;
输出:第一排留下的人数、调整后共几排。
各位要是会的话请写出WIN-TC的程序来,谢谢啦。
晕,花了我一个小时的时间:
#include<stdio.h> int main() {int a[50][50],i,j,k,h=0,m,t,q,n; printf("Input n(2~45):"); scanf("%d",&n); if(n<2||n>45) {printf("Input error!\n"); getch();return 0;} for(i=0;i<50;i++) for(j=0;j<50;j++) a[i][j]=0; printf("Input everyone's shenga\n"); for(i=0;i<n;i++) scanf("%d",&a[0][i]); k=0; for(i=0;i<n;i++) {h=0; if(a[i][0]==0) break; aa: j=0; while(a[i][j]!=0) { if(a[i][j]<a[i][j+1]) {a[k+1][h++]=a[i][j]; for(m=j;a[i][m+1]!=0;m++) a[i][m]=a[i][m+1]; a[i][m]=0; } else j++;
} for(t=0;a[i][t]!=0;t++); for(q=0;q<t-1;q++) if(a[i][q]<a[i][q+1]) break; if(q<t-1) goto aa;
k++; } for(i=0;i<k;i++) {printf("line %d:",i+1); for(j=0;j<n;j++) if(a[i][j]!=0) printf("%5d",a[i][j]); printf("\n"); }
for(i=0;a[0][i]!=0;i++); printf("There are %d lines,the first line have %d persons.\n",k,i); printf("\n\n"); getch(); return 1; }
[此贴子已经被作者于2004-10-09 19:23:10编辑过]