当前位置: 代码迷 >> C语言 >> 有个比较有趣的问题,各位高手们看看该怎么做啊
  详细解决方案

有个比较有趣的问题,各位高手们看看该怎么做啊

热度:300   发布时间:2004-10-09 14:47:00.0
有个比较有趣的问题,各位高手们看看该怎么做啊

全班有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编辑过]


----------------解决方案--------------------------------------------------------

for(i=0;i<n;i++) for(j=0;j<n;j++) a[i][j]=0;

你是要给任何元素都赋值为0吗?

如果是为什么又要

for(i=0;i<n;i++) scanf("%d",&a[0][i]);


----------------解决方案--------------------------------------------------------

首先建一个方阵,

里面的元素都是0,

开始站在第一排,

不符合要求的就往后站……


----------------解决方案--------------------------------------------------------
请问你随便举个例子试了一下吗?我试了一下好象不太行,我是看不太懂,不过最不懂的就是return 0  和 return 1,这是什么意思啊,最好在程序上加上注释,麻烦你了。要不我看不懂啊
----------------解决方案--------------------------------------------------------
这是一个标准的递归问题
----------------解决方案--------------------------------------------------------

空前的做法是不是好象少点什么啊?要不怎么举的例子输进去后输出结果都是There are1lines,the first line

have 1persons。呢?  如果改一改的话就好了,希望空前这位老大改好了发过来。谢谢啦

别的老大会的话也发上来让我看看,谢谢!~~


----------------解决方案--------------------------------------------------------
不要把最高的人最后输入,这样第一排就不会是一个人了。
----------------解决方案--------------------------------------------------------
OK  你这种算法挺酷的  谢谢你,麻烦你了!~~~~~~(采取knocker的建议,即使没这建议我也会的,因为毕竟是在不认识的情况下有人给解释嘛.无论怎样也要谢谢)
----------------解决方案--------------------------------------------------------
呵呵,共同学习……
----------------解决方案--------------------------------------------------------
  相关解决方案