循环赛日程表
来源:互联网 发布:ping网络命令的使用 编辑:程序博客网 时间:2024/04/28 10:57
对于书上那个日程表的实现,第三版的课本给出了循环实现的方法,不过这个表的生成明显要用递归方法生成更为合适,此表如下:
可以看到每次该表的生成总可以分成四个字表的填充过程,初始化让左边第一列填充上之后,然后每一次先递归填充左上角的子表,然后再填充左下角的子表,然后右上和右下的子表用copy的方法填充,实现代码如下:
1 #include<iostream> 2 using namespace std; 3 const int SIZE = 100; 4 int table[SIZE][SIZE]; 5 void fillTable(int x,int y,int step){ 6 /*其实step=2的情形也可以用下面的递归通式完成 7 if(step==2){ 8 table[x+1][y+1]=table[x][y]; 9 table[x][y+1]=table[x+1][y];10 return ;11 }*/12 if(step==1)return;13 14 step/=2;//把原问题分为四个表格的填写15 fillTable(x,y,step);//填写左上子表格16 fillTable(x+step,y,step);//填写左下的子表格17 //右上的子表格抄写左下的子表格18 //右下的子表格抄写左上的子表格19 //注意坐标要使用相对坐标20 for(int i=0;i<step;i++)21 for(int j=0;j<step;j++){22 table[x+step+i][y+step+j]=table[x+i][y+j];23 table[x+i][y+step+j]=table[x+step+i][y+j];24 }25 }26 27 int main(){28 int n;cin>>n;29 for(int i=1;i<=n;i++)table[i][1]=i;30 fillTable(1,1,n);31 for(int i=1;i<=n;i++){32 for(int j=1;j<=n;j++)33 cout<<table[i][j]<<" ";34 cout<<endl;35 }36 return 0;37 }
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- python中的yield
- Linux 2.6内核 动态加载字符设备驱动模块
- 数据库顺序输出
- 设计模式学习之路——Builder
- 数据库主键选择策略
- 循环赛日程表
- 关于SPList的Update及AllowUnsafeUpdates
- linux内存和磁盘使用查询命令
- JFreeChart在Linux下图片不显示 No JFreeChart object found on the stack with name chart
- Ubuntu11.10上的折腾
- 利用__FILE__, __LINE__, __FUNCTION__跟踪调试程序
- 从2.4到2.6: Linux 内核可装载模块机制的改变对设备驱动的影响
- Makefile 学习(1):Introduction
- open和fopen的区别