本题有多组结果,而只要能找出一种就可以!而测试样例就不用多看了!!
代码:
#include<stdio.h>
#include<string.h>
#define Max 105
int main(){
int n,k,m;
int i,j;
int stu[Max],cla[Max];
int mark[Max][Max];
memset(mark,0,sizeof(mark));
scanf("%d%d%d",&n,&k,&m);
for(i=1,j=0;i<=n;i++,j++){
j%=k;
stu[i]=j%k+1;
}
for(i=1;i<=n;i++)
printf("%d\n",stu[i]);
int num=0;
for(i=1;i<n;i+=2){
printf("%d %d\n",i,i+1);
mark[i][i+1]=1;
mark[i+1][i]=1;
num++;
if(num==m)
break;
}
//num=0;
int mark1=0;
if(n%2==1){
for(i=1;i<n;i++)
if(mark[i][n]==0 && stu[i]!=stu[j]){
mark[i][n]=1;
mark[n][i]=1;
printf("%d %d\n",i,n);
num++;
break;
}
}
//printf("num=%d\n",num);
if(num<m){
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(i==j)
continue;
if(mark[i][j]==0 && stu[i]!=stu[j]){
mark[i][j]=1;
mark[j][i]=1;
printf("%d %d\n",i,j);
num++;
}
if(num==m){
mark1=1;
break;
}
}
if(mark1)
break;
}
}
return 0;
}