ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:17.40KB ,
资源ID:3853899      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3853899.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法循环赛.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法循环赛.docx

1、算法循环赛一void Table(int k,int * *a) int n=1; for (int i=1;i=k;i+)n* =2; for (int i=1;i=n;i+)a1i=i; int m=1; for (int s=1;s=k;s+) n/=2; for(int t=1;t=n;t+) for(int i=m+1;i=2*m;i+) for(int j=m+1;j=2*m;j+) aij+(t-1)*m*2=ai-mj+(t-1)*m*2-m; aij+(t-1)*m*2-m=ai-mj+(t-1)*m*2; m* =2; 二1 #include 2 using namespa

2、ce std; 3 const int SIZE = 100; 4 int tableSIZESIZE; 5 void fillTable(int x,int y,int step) 6 /*其实step=2的情形也可以用下面的递归通式完成 7 if(step=2) 8 tablex+1y+1=tablexy; 9 tablexy+1=tablex+1y;10 return ;11 */12 if(step=1)return;13 14 step/=2;/把原问题分为四个表格的填写15 fillTable(x,y,step);/填写左上子表格16 fillTable(x+step,y,step

3、);/填写左下的子表格17 /右上的子表格抄写左下的子表格18 /右下的子表格抄写左上的子表格19 /注意坐标要使用相对坐标20 for(int i=0;istep;i+)21 for(int j=0;jn;29 for(int i=1;i=n;i+)tablei1=i;30 fillTable(1,1,n);31 for(int i=1;i=n;i+)32 for(int j=1;j=n;j+)33 couttableij ;34 coutendl;35 36 return 0;37 三1 #include 2 using namespace std ; 3 #include 4 int m

4、ain() 5 int m,n=-1,i,j,k; 6 int two20; 7 cinm; 8 j=1; 9 for(i=0;i20;i+)10 twoi=j;11 if(m=j)n=i;12 j*=2;13 14 15 coutnendl;16 if(n0)coutm is wrong number !endl;return 0;17 vectorvectorarr(m,vector(m);18 for(i=0;im;i+)arri0=i+1;19 for(i=0;in;i+)20 int updown=0;21 for(j=0;jm;j+)22 if(j%twoi=0)updown+;2

5、3 if(updown%2=1)24 for(k=twoi;k=twoi+1-1;k+)25 arrj+twoik=arrjk-twoi;26 27 28 else29 for(k=twoi;k=twoi+1-1;k+)30 arrj-twoik=arrjk-twoi;31 32 33 34 35 36 for(i=0;im;i+)37 for(j=0;jm;j+)38 coutarrij ;39 coutendl;40 41 return 0;42 四1、算法一:#include#define N 64void GameTable(int k,int aN)/n=2k(k=1)个选手参加比赛

6、,二维数组a表示日程安排,数组下标从1开始int n=2;/k=0,两个选手比赛日程可直接求得/求解两个选手比赛日程,得到左上角元素a11=1;a12=2;a21=2;a22=1;int i,j,t;for(t=1;tk;t+)/迭代处理,依次处理22,.,2k个选手比赛日程 int temp=n;n=n*2; /填左下角元素 for(i=temp+1;i=n;i+) for(j=1;j=temp;j+) aij=ai-tempj+temp;/左下角元素和左上角元素的对应关系 /将左下角元素抄到右上角 for(i=1;i=temp;i+) for(j=temp+1;j=n;j+) aij=ai

7、+temp(j+temp)%n; /将左上角元素抄到右下角 for(i=temp+1;i=n;i+) for(j=temp+1;j=n;j+) aij=ai-tempj-temp;for(i=1;i=n;i+)/显示日程表 for(j=1;j=n;j+) printf(- ,aij); if(j=n) printf(n); void main()int aNN;int k;printf(输入选手的个数:(注意为2的平方);scanf(%d,&k);GameTable(k,a);2、结果验证当两个选手,即k=1时当4个选手时,即k=2当8个选手,即k=3当16个选手时,即k=16时间复杂度分析:

8、迭代处理的循环体内部3个循环语句,每个循环语句都是一个嵌套的for循环,且它们的执行次数相同,基本语句是最内层循环体的赋值语句,即填写比赛日程表的元素。基本执行语句的执行次数是:T(n)=所以时间复杂度为O(4k)改进的算法:#includeusing namespace std;const int SIZE = 50;int aSIZESIZE;void copy(int n);void tournament(int n); int odd(int n); /判断奇偶性void makecopy(int n); /makecopy 与copy算法类似,但是区分了n/2为奇数或偶数的情形voi

9、d copyodd(int n); / 实现n/2为奇数时的复制void main() int n; int i,j; cin n; tournament(n); if(odd(n) / n为奇数和偶数输出情况不同,要分别考虑 for(i = 1; i=n; i+) for(j = 1; j=n+1; j+) if(aij = n+1) cout 0 ; else cout aij ; cout endl; else for(i = 1; i=n; i+) for(j = 1; j=n; j+) cout aij ; cout endl; void copy(int n) int m = n/

10、2; for(int i = 1; i=m; i+) for(int j = 1; j 1 & odd(n/2) copyodd(n); else copy(n);void copyodd(int n) / 实现n/2为奇数时的复制 int bSIZE; int m = n/2; for(int i = 1; i=m; i+) bi = m+i; bm+i = bi; for(i = 1; i=m; i+) for(int j=1; j m) aij = bi; am+ij = (bi + m)%n; else am+ij = aij + m; for(j = 2; j=m; j+) aim+

11、j = bi+j-1; abi+j-1m+j = i; 结果验证:当参赛人数为偶数 8时当参赛人数为奇数 7时六#includevoid copy(int n);void tour(int n);void makecopy(int n);void copyodd(int n);int a100100;int b100;int main() int n,i,j; printf(Please input n :n); scanf(%d,&n); for(i=1;i=n;i+) a1i=i; ai1=i; tour(n); if(n % 2 = 1) for(i=1;i=n;i+) for(j=1;

12、j=n+1;j+) if(aij = n +1) printf( ); else printf(%-4d,aij); printf(n); else for(i=1;i=n;i+) for(j=1;j = n;j+) if(aij = n +1) printf( ); else printf(%-4d,aij); printf(n); void copy(int n) int m = n/2; int i,j; for(i=1;i=m;i+) for(j=1;j1 & (n/2)%2) copyodd(n); else copy(n);void copyodd(int n) int i,j; int m=n/2; for(i=1;i=m;i+) bi=m+i; bm+i=bi; for(i=1;i=m;i+) for(j=1;jm) aij=bi; am+ij=(bi+m)%n; else am+ij=aij+m; for(j=2;j=m;j+) aim+j=bi+j-1; abi+j-1m+j=i;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1