练习题目-分数字

时间:2023-02-23 13:46:52

题目描述

童年的我们,对各种事物充满了好奇与向往。这天,小朋友们对数字产生了兴趣,并且想和数字交朋友。可是,怎么分配这些数字才能使得每个小朋友都唯一地找到一个数字朋友呢?C小朋友说:咱们按自己名字的字典序先后,依次选择一个剩余的最小的数字当朋友。好么?Q小朋友十分赞同。于是,大家都同意了。

输入

第一行为一个数n,为小朋友数和数字数。 下面n行为小朋友们的名字。 再下面n行为候选的n个数字。

输出

n行,按字典序输出n个小朋友姓名及所选的数字朋友。

样例输入

5
src
oldway
claire
whqsdhr
ylq
89757
20091111
130203
8000800
1008611

样例输出

claire 89757
oldway 130203
src 1008611
whqsdhr 8000800
ylq 20091111
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int f(char s1[],char s2[])
{
	int i=0;
	while(s1[i]!='\0')
	{
		i++;
	}
	int j=0;
	while(s2[j]!='\0')
	{
		j++;
	}
	if(i==j)
	{
		return strcmp(s1,s2);
	}
	else if(i>j)
			return 1;
	else return -1;
} 
int main()
{
    char a[10001][30],b[10001][20];
    int n;
    scanf("%d",&n);
    getchar();
    int i;
    for(i=1;i<=n;i++)
    {
    	gets(a[i]);
	}
	for(i=1;i<=n;i++)
    {
    	gets(b[i]);
	}
	int j=2,p;
	char temp1[30];
	char temp2[20];
	for(;j<=n;j++)
	{
		strcpy(temp1,a[j]);
		p=j-1;
		while(p>=1&&strcmp(temp1,a[p])<0)
		{
			strcpy(a[p+1],a[p]);
			p--;
		}
		strcpy(a[p+1],temp1);
		
		strcpy(temp2,b[j]);
		p=j-1;
		while(p>=1&&f(temp2,b[p])<0)
		{
			strcpy(b[p+1],b[p]);
			p--;
		}
		strcpy(b[p+1],temp2);
	}
	i=1;
	for(;i<=n;i++)
	{
		printf("%s ",a[i]);
		printf("%s\n",b[i]);
	}
    return 0;
}