一、美团打算选调 n 名业务骨干到 n 个不同的业务区域,本着能者优先的原则,公司将这 n 个人按照业务能力从高到底编号为 1~n 。编号靠前的人具有优先选择的权力,每一个人都会填写一个意向,这个意向是一个 1~n 的排列,表示一个人希望的去的业务区域顺序,如果有两个人同时希望去某一个业务区域则优先满足编号小的人,每个人最终只能去一个业务区域。 例如 3 个人的意向顺序都是 1 2 3 ,则第一个人去 1 号区域,第二个人由于 1 号区域被选择了,所以只能选择 2 号区域,同理第三个人只能选择 3 号区域。最终请你输出每个人最终去的区域。
C语言版本
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int n; //业务员数量
int a[300][300]; //业务员意向
int i,j,h,k=1;
int temp; //中间值
int flag=1;
scanf("%d",&n); //输入业务员数量
for(i=0;i<n;i++) //输入业务员意向,并存入数组中
{
for(j=0;j<n;j++)
{
scanf("%d ",&a[i][j]);
}
scanf("\n");
}
int* b=(int*)malloc(n*sizeof(int)); //动态分配
b[0] = *(*(a));
for(i=1;i<n;i++)
{
for(j=0;j<n;j++)
{
for(h=0;h<k;h++)
{
if(*(*(a+i)+j) == b[h]) //不满足条件,直接j++
{
flag=0; //退出
break;
}
else
{
flag=1;
}
}
if(flag != 0) //说明a[i][j]不等于b[]中任何一位
{
b[k]=*(*(a+i)+j);k++; //存入输出的数组中
// printf("%d\n",k);
break;
}
}
}
for(h=0;h<n;h++)
{
printf("%d ",b[h]);
}
}
|