for(intj=0;j*((int*)arr+k*i+j)=*((int*)arr+k*(a-i-1)+j);
//arr[i][j]=arr[a-i-1][j];
}
}
}
}
intmain(){
intn;
scanf("%d",&n);
intm=(int)power(2,n);
intarr[m][n];
Grey(m,n,(int**)arr,n);
for(inti=0;ifor(intj=n-1;j>=0;j--){
printf("%d",arr[i][j]);
}
printf("\n");
}
getchar();
return0;
}
9、循环比赛
描述
设有N个选手的循环比赛。
其中N=2^M(2的M次方),要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。
输入
M
输出
表格形式的比赛安排表
样例输入
3
样例输出
12345678
21436587
34127856
43218765
56781234
65872143
78563412
87654321
提示
M的大小不会超过8
源代码:
#include
#include
voidarrange(intk,int**a,intn){
intt=1,temp=1;
*((int*)a+k*0+0)=1;
//a[0][0]=1;
while(t<=n){
for(inti=0;ifor(intj=0;j*((int*)a+k*i+j+temp)=*((int*)a+k*i+j)+temp;
//a[i][j+temp]=a[i][j]+temp;
}
}
for(inti=0;ifor(intj=0;j*((int*)a+k*(i+temp)+j)=*((int*)a+k*i+j+temp);
//a[i+temp][j]=a[i][j+temp];
*((int*)a+k*(i+temp)+j+temp)=*((int*)a+k*i+j);
//a[i+temp][j+temp]=a[i][j];
}
}
temp*=2;
t++;
}
}
intmain(){
intn;
scanf("%d",&n);
intk=1;
for(inti=0;ik=2*k;
}
inta[k][k];
arrange(k,(int**)a,n);
for(inti=0;ifor(intj=0;jprintf("%d",a[i][j]);
}
printf("\n");
}
getchar();
return0;
}
10、棋盘覆盖问题
描述
在一个2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格,且称该棋盘为特殊棋盘。
显然,特殊方格在棋盘中出现的位置有4k种情形,因而有4k种不同的棋盘,如图1所示是k=2时16种棋盘中的一个。
在棋盘覆盖问题中,要求用图2所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何两个L型骨牌不得重叠覆盖。
输入
对每一个测试例有2行,第一行是k(1<=k<=10),第二行是特殊方格所在的位置坐标x,y(0<=x,y<1024)。
输出
边长为2的k次方的方阵,特殊方格的编号为0,所有L型骨牌从1开始编号,数据之间的间隔是空格。
样例输入
2
01
样例输出
2033
2213
4115
4455
提示
按分治策略进行算法设计。
#include
#include
intt=0;
intboard[100][100];
voidChessBoard(inttr,inttc,intdr,intdc,intsize){
ints,t1;
if(size==1)return;
t1=++t;
s=size/2;
if(dr
ChessBoard(tr,tc,dr,dc,s);
}else{
board[tr+s-1][tc+s-1]=t1;
ChessBoard(tr,tc,tr+s-1,tc+s-1,s);
}
if(dr
|
=tc+s){ChessBoard(tr,tc+s,dr,dc,s);
}else{
board[tr+s-1][tc+s]=t1;
ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
}
if(dr>=tr+s&&dcChessBoard(tr+s,tc,dr,dc,s);
}else{
board[tr+s][tc+s-1]=t1;
ChessBoard(tr+s,tc,tr+s,tc+s-1,s);
}
if(dr>=tr+s&&dc>=tc+s){
ChessBoard(tr+s,tc+s,dr,dc,s);
}else{
board[tr+s][tc+s]=t1;
ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
}
}
intmain(){
intn,size=1;
scanf("%d",&n);
for(inti=0;isize=size*2;
}
intdr,dc;
scanf("%d%d",&dr,&dc);
ChessBoard(0,0,dr,dc,size);
for(inti=0;ifor(intj=0;jprintf("%d",board[i][j]);
}
printf("\n");
}
getchar();
return0;
}
11、输油管道问题
描述
某石油公司计划建造一条由东向西的主输油管道。
该管道要穿过一个有n口油井的油田。
从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。
如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?
证明可在线性时间内确定主管道的最优位置。
要求给定n口油井的位置,计算各油井到主管道之间的输油管道最小长度总和。
输入
由文件提供输入数据,文件第一行是油井数n,1<=n<=10000。
接下来n行是油井的位置,每行两个整数x和y,-10000<=x,y<=10000。
输出
将结果输出到文件中,文件第一行中的数是油井到主管道之间的输油管道最小长度总和。
样例输入
5
12
22
展开阅读全文
相关搜索
资源标签