c语言的问题
程序代码:
问题描述: 输入1个数N(1 <= N <= 5000),表示歌曲数.接下来共有N行,每行包括一个字符串m (长度小于50字节,可能有中文,一个中文字占2个字节),以及一个数字p(p <= INT_MAX)。 m表示歌曲名,p表这首歌的优先级(1,2,3...),数字越小优先级就越高.优先级<=0的歌 曲是coder不喜欢的.保证不存在两首歌优先级相同的情况.保证不存在两首歌名称相同的情 况. 输出一个k,表示coder同学喜欢听的歌曲的数量.接下去k行,优先级从高到低,每行输出 coder同学喜欢听的音乐名称. SAMPLE INPUT 2 月亮至上 -1 because of you 1 6 太早 3 不完整的旋律 4 第一个清晨 1 18 and life 2 still'loving 6 我恨你 5 SAMPLE OUTPUT 1 because of you 6 第一个清晨 18 and life 太早 不完整的旋律 我恨你 still'loving 下面是我写的代码,不知道哪里错了,求高人看看。。。 #include <iostream> #include <string> #include<algorithm> using namespace std; #define MAX 5001 struct TSong { char ch[52]; }; struct TLike { char st[52]; int p; }; TSong tsong[MAX]; TLike tlsong[MAX]; void vSort(int n); bool cmp(const TLike &A,const TLike &B); void vOut(int n); void vInput(int n); int nDevi(int n); void vInit(); int main() { int N,q; while(cin>>N) { vInit(); vInput(N); q=(nDevi(N))-1; if(0==q) cout<<q<<ENDL; else { vSort(q); vOut(q); } } return 0; } void vInput(int n) { int i; for(i=1;i<=n;i++) { fflush(stdin); gets(tsong[i].ch); } } int nDevi(int n) { int i,len,k; k=1; for(i=1;i<=n;i++) { len=strlen(tsong[i].ch); if(tsong[i].ch[len-2]==' ') { tlsong[k].p=tsong[i].ch[len-1]-'0'; for(int q=0;q<LEN-2;q++) { tlsong[k].st[q]=tsong[i].ch[q]; } k++; } } return k; } void vOut(int n) { int i; cout<<N<<ENDL; for(i=1;i<=n;i++) { printf("%s\n",tlsong[i].st); } } void vSort(int n) { sort(&tlsong[1],&tlsong[n+1],cmp); } bool cmp(const TLike &A,const TLike &B) { return A.p<B.P; } void vInit() { memset(tlsong,'\0',sizeof(tlsong)); }
[ 本帖最后由 newthf 于 2012-11-27 21:50 编辑 ]