Description
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。
Input
第一行男士人数m和女士人数n(1<=m,n<=100);
第二行舞曲的数目k(1<=k<=100)。
Output
共k行,每行两个数,表示配对舞伴的序号,男士在前,女士在后。
Sample Input
4 3
6
Sample Output
1 1
2 2
3 3
4 1
1 2
2 3
HINT
代码:
#include <stdio.h>
void input(int a[],int n);
void inputarr(int b[],int m);
void cancle(int a[],int b[],int n,int m,int k,int h);
void canclearr(int a[],int b[],int n,int m,int k,int h);
int main()
{
int k,n,m,h;
int a[120]={0};
int b[120]={0};
scanf("%d%d%d",&n,&m,&k);
input(a,n);
inputarr(b,m);
h=n>m?n:m;
if(n>=m)
{
cancle(a,b,n,m,k,h);
}
else
{
canclearr(a,b,n,m,k,h);
}
return 0;
}
void input(int a[],int n)
{
int i=1;
for(i=1;i<=n;i++)
{
a[i]=i;
}
}
void inputarr(int b[],int m)
{
int i=1;
for(i=1;i<=m;i++)
{
b[i]=i;
}
}
// 男士 n ,女士 m n>=m的情况
void cancle(int a[],int b[],int n,int m,int k,int h)
{
int i=1,j=1,l=1;
while(k>0)
{
for(j=1;j<=h;j++) //h为 m 和 n 中的较大者
{
if(i<=m)
{
printf("%d %d\n",j,i);
k--;
i++;
if(k==0)
{
break;
}
}
else
{
l=1;
printf("%d %d\n",j,l);
l++;
i=l;
k--;
if(k<=0)
{
break;
}
}
}
}
}
//男士少于女士的情况
void canclearr(int a[],int b[],int n,int m,int k,int h)
{
int i=1,j=1,l=1;
while(k>0)
{
for(j=1;j<=h;j++) //h为 n 和 m 中的较大者
{
if(i<=n)
{
printf("%d %d\n",i,j);
k--;
i++;
if(k==0)
{
break;
}
}
else
{
l=1;
printf("%d %d\n",l,j);
l++;
i=l;
k--;
if(k<=0)
{
break;
}
}
}
}
}