- 论坛徽章:
- 0
|
赛程安排的算法
经过N天的讨论,算法终于找出来了,其实简单的可怕:
你上眼
- /*termplay.c
- *programm by ETSG(BIRDIC,CELLAR),2000-2005
- *N队单循环赛赛程安排的程序
- *注:程序是将各队排号,使用时可将其用实际队名替换,
- *如队数为奇数,则与不存在的队比赛的队轮空
- *感谢远在加拿大的组员BIRDIC提供算法
- */
- #include <stdio.h>;
- #include <stdlib.h>;
- int main(int argc, char *argv[])
- {
- int i,j,tmp,k,arrsiz;
- if(argc!=2){
- printf("uses:%s num",argv[0]);
- exit(1);
- }
- arrsiz=atoi(argv[1]);
- arrsiz=arrsiz%2?arrsiz+1:arrsiz;
- int *arr=malloc(sizeof(int)*arrsiz);
- for(i=0;i<arrsiz;i++)
- arr[i]=i;
- for(i=1;i<arrsiz;i++){
- printf("------------BEGIN OF ROUND %d------------\n",i);
- tmp=arr[arrsiz-1];
- for(j=arrsiz-1;j>;1;j--)
- arr[j]=arr[j-1];
- arr[1]=tmp;
- for(k=0;k<arrsiz/2;k++)
- printf("%d vs %d\t",arr[k],arr[arrsiz-1-k]);
- printf("\n------------END OF ROUND %d------------\n",i);
- }
- free(arr);
- return 0;
- }
复制代码 |
|