10char
用一个二维的字符数组,来存储输入的名字的字符串,排除掉重复的字符串,并以剩余字符串从小到大排列,每一次输入都要调整现有的数组。
调整方法如下:
从头到尾和所有的字符串进行比较,如果输入字符串大,就继续向后比较;
如果有相同字符串,则忽略当前输入;如果输入字符串比当前字符串小,则输入字符串应该插入到当前字符串的位置,其余字符串都要向后移。
样例输入:
Tom
Jason
Andy
Bart
Howard
House
Jane
Jason
#
样例输出:
Andy
Bart
Howard
Jack
Jane
Jason
Tom
//方法2
#include
#include
#include
#include
using namespace std;
int main()
{
int N,M,temp;
int ap[100000]={0},tt[301]={0};
cin>>N>>M;
for(int i=0;i cin>>ap[i]; for(int i=0;i { cin>>temp; tt[temp]++; } for(int i=0;i for(int j=ap[i];j>0;j--) if(tt[j]) { M--; tt[j]--; break; } cout< return 0; } //方法3 #include #include #include #include using namespace std; int main() { int N,M,temp; int ap[301]={0},tt[301]={0}; cin>>N>>M; for(int i=0;i { cin>>temp; ap[temp]++; } for(int i=0;i { cin>>temp; tt[temp]++; } for(int i=300;i>0;i--) for(int j=i;j>0;j--) if(ap[i]&&tt[j]&&j { M--; tt[j]--; ap[i]--; i++; } cout< return 0; } //测试数据生成 #include #include #include #include using namespace std; int main() { int n,m; cin>>n>>m; FILE *in=fopen("at.in","w"); FILE *out=fopen("at.out","w"); srand((unsigned)time( NULL ) ); fprintf(in,"%d %d\n",n,m); int ap[301]={0},tt[301]={0},temp; for(int i=0;i { temp=rand()%300; ap[temp]++; fprintf(in,"%d\n",temp); } for(int i=0;i { temp=rand()%300; tt[temp]++; fprintf(in,"%d\n",temp); } for(int i=300;i>0;i--) for(int j=i;j>0;j--) if(ap[i]&&tt[j]&&j { m--; tt[j]--; ap[i]--; i++; } fprintf(out,"%d\n",m); return 0; }