算法设计与分析习题答案_第1页
算法设计与分析习题答案_第2页
算法设计与分析习题答案_第3页
算法设计与分析习题答案_第4页
算法设计与分析习题答案_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算法设计与分析习题答案(第二版)

主编:吕国英

习题答案

习题答案

第三章:

1.

#include<stdlib.h>

#include<stdio.h>

intmain(intargc,char**argv)

{

intn;

inti,j,k;

int*buf;

printf("请输入n的数值:");

scanf&n);

buf=(int*)malloc(n*sizeof(int));

for(i=0;i<n;i++)

{

buf[i]=2;

for(i=n-2;i>=0;i一)

for(j=i;j>=0;j—)

buf[j]+=2;

}

}

for(k=0;k<=n-2;k++)

{

if(buf[k]>=10)

{

buf[k+l]+=buf[k]/10;

buf[k]%=10;

}

}

for(i=n-l;i>=0;i一)

printfbuf[i]);

printf('\n");

return0;

}

2.

#include<stdio.h>

intmain(intargc,char**argv)

intbuf[6][6];

inti,j;

printf("任意输入6个数字:");

for(i=0;i<6;i++)

scanf&buf[0][i]);

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

{

buf[i+l][j+l]=buf[i][j];

)

buf[i+l][0]=buf[i][j];

}

for(i=0;i<6;i++)

{

for(j=0;j<6;j++)

printf("%d",buf

printf(〃\n〃);

return0;

3.

#include<stdio.h>

#defineN7

intmain(intargc,char**argv)

{

intbuf[N][N];

inti,j,k,m,n;

inta=0,b=N-l;

intcount=l;

for(i=0;i<(N/2)+(N%2);i++)

{

for(j=a;j<=b;j++)

{

buf[a][j]=count++;

}

for(k=a+l;k<=b;k++)

{

buf[k][b]=count++;

)

for(m=b-1;m>=a;m-)

buf[b][m]=count++;

for(n=b-l:n>a;n一)

buf[n][a]=count++;

}

a++;

b一;

}

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

printf("%5d”,buf[i][j]);

printf(〃\n〃);

}

return0;

}

4.

#include<stdio.h>

#defineN5

intmain(intargc,char**argv)

intbuf[N][N];

inti,j,k;

intcount=l;

intn=0;

for(i=0;i<N;i++)

{

for(k=0,j=n;j>=0;j—,k++)

buf[j][k]=count++;

n++;

}

for(i=0;i<N;i++)

{

for(j=0;j<N-i;j++)

printf("%5d”,buf[i][j]);

printf(〃\n〃);

}

return0;

}

5.

#include<stdio.h>

#defineN5

intmain(intargc,char**argv)

intbuf[N][N];

inti,j;

inta=0,b=N-l;

intcount=l;

for(i=0;i〈N/2+N%2;i++)

{

for(j=a;j<=b;j++)

buf[a][j]=count;

for(j=a+l;j<=b;j++)

buf[j][b]=count;

for(j=b-l;j>=a;j—)

buf[b][j]=count;

for(j=b-l;j>a;j—)

buf[j][a]=count;

count++;

a++;

b一;

}

for(i=0;i<N;i++)

for(j=0;j<N;j++)

printf("%5d”,buf[i][j]);

printf('\n");

return0;

}

6.

#include<stdio.h>

#include<stdlib.h>

typedefstructsnodes_list;

typedefslist*link;

structs_node

{

charch;

intflag;

linknext;

);

linktop;

voidpush(charch,intflag)

{

linknewnode;

newnode=(link)malloc(sizeof(s_list));

newnode->ch=ch;

newnode->f1ag=f1ag;

newnode->next=NULL;

if(top-NULL)

{

top=newnode;

}

else

(

newnode->next=top;

top=newnode;

}

}

intpop()

{

intflag;

linkstack;

if(top!=NULL)

{

stack=top;

top=top->next;

flag=stack->flag;

free(stack);

returnflag;

intop(charch)

{

switch(ch)

{

case'+':

return1;

break;

case'-:

return2;

break;

case'*':

return3;

break;

case'/':

return4;

break;

default:

return5;

voidnirnava(char*buf,intcount)〃count个数,buf数组

intbool=l;

intmin;

intj;

inti;

intk;

intflag;

for(i=0;i<count;i++)

{

if(buf[i]=='(')

push(buf[i],i);

if(buf[i]==')’)

{

flag=pop();

if(flag!=0)

]

if((buf[flag-1]==,)&&(buf[i+l]==')'))

(

buf[flag]!';

buf[i]='!';

min=op(buf[flag]);

for(j=flag+l;j<i;j++)

]

if(buf[j]=='(')

(

push(buf[j],j);

bool=0;

continue;

)

else

if(buf[j]=='Y)

{

pop0;

bool=l;

continue;

}

if(bool-1)

(

if(min>op(buf[j]))

min=op(buf[j]);

if(i<count-l)

if((buf[i+l]=='+'):(buf[i+l]=='-'))

(

if(flag==O)

(

buf[i]='!';

buf[flag]=,!";

)

else

if(op(buf[flag-1])<=min)

(

buf[i]='!’;

buf[flag]=,!';

)

)

else

if((buf[i+1]—'*')||(buf[i+l]=='/'))

if(flag==0)

buf[i]='!';

buf[flag]=,!';

)

else

if((min>=op(buf[i+l])&&op(buf[flag-1])<=min))

(

buf[i]='!';

buf[flag]='!';

)

}

)

else

if(i-count-l)

(

if(flag—0)

{

buf[i]=’!’;

buf[flag]=,!';

}

else

if(op(buf[flag-1])<=min)

buf[i]='!';

buf[flag]=,!';

)

for(k=0;k<count;k++)

{

if(buf[k]!='!')

printf("%c”,buf[k]);

}

printf("\n");

}

intmain(void)

(

charbuf[255];

inti;

for(i=0;i<255;i++)

{

scanf("枇”,&buf[i]);

if(buf[1]=='\n,)

break;

buf[i]='\0';

nirnava(buf,i);

return0;

}

7.

#include<stdio.h>

#include<stdlib.h>

intack(intm,intn);

intcount=0;

intmain(intargc,char**argv)

{

intm,n;

scanf(z/%d%d/z,&m,&n);

printf(“刎\n",ack(m,n));

printf("%d\n",count);

return0;

}

intack(intm,intn)

{

count++;

if(m==0)

returnn+1;

else

if(n==0)

returnack(m-1,1);

else

returnack(m-1,ack(m,n-1));

}

8.

#include<stdio.h>

charbuf[1024];

intishuiwen(inta,intcount)

{

if(a==count/2)

{

return1;

}

else

if(buf[a]—buf[count-a-1])

return(is_huiwen(a-1,count))&&1;

else

return0;

intmain(void)

intcount;

inti;

for(i=0;i<1024;i++)

{

scanf(“枇",&buf[i]);

if(buf[i]—'\n)

break;

}

count=i;

i—;

printf(“刎",is_huiwen(i,count));

return0;

}

9.

#include<stdio.h>

charbuf[100];

intpos(inta,intb)

if(b-a-l)

return1;

else

if(b-a==O)

return1;

else

returnpos(a,b-1)+pos(a,b-2);

}

intmain(void)

{

inta,b;

scanf("%d%d”,&a,&b);

printf(z/%dz/,pos(a,b));

return0;

}

10.

#include<stdio.h>

#defineMAX1024

intbuf[MAX];

intmain(void)

intm,n;

inti;

scanf("%d%d”,&m,&n);

for(i=0;i<MAX;i++)

buf[i]=0;

i=0;

while(buf[i%m]==0)

(

buf[i%m]=l;

i+=n;

}

for(i=0;i<m;i++)

{

if(buf[i]=0)

printf(z/%d”,i);

}

return0;

}

11.

#include<stdio.h>

intmain(void)

inttemp,tempi;

intcount=0;

intn;

inti;

scanf("%d",&n);

for(i=l;i<=n;i++)

(

temp=i%10;

if(temp-5)

count++;

else

if(temp==0)

(

templ=i;

while((templ%10)==0)

(

templ=templ/10;

count++;

printfcount);

return0;

12.

#include<stdio.h>

intmain(void)

{

intcount=0;

intbuf[53];

inti,n;

for(i=l;i<53;i++)

{

buf[i]=l;

}

for(n=2;;n++)

{

for(i=n;i<53;i+=n)

{

buf[i]=l-buf[i];

count++;

if(count>=104)

break;

if(count>=104)

break;

for(i=l;i<53;i++)

{

if(buf[i]==l)

printf(z/%d”,i);

}

printf('\n");

return0;

}

13.

#include<stdio.h>

intmain(void)

{

inta,b,c,d,e;

for(a=l;a<=5;a++)

for(b=l;b<=5;b++)

if(a!=b)

for(c=l;c<=5;c++)

if(c!=a&&c!=b)

for(d=l;d<=5;d++)

if(d!=a&&d!=b&&d!=c)

e=15-a-b-c-d;

if(e!=a&&e!=b&&e!=c&&e!=d)

if(((b-3)+(c==5)==1)&&((d==2)+(e==4)==1)&&((b==l)+(e—

4)==1)&&((c==l)+(b==2)==1)&&((d==2)+(a==3)—1))

printf("a=%d,b=%d,c=%d,d=%d,e=%d”,a,b,c,d,e);

)

return0;

}

14.

#include<stdio.h>

intmain(void)

{

intbuf[3];

inti;

intmul;

inttemp;

for(i=10;i<=31;i++)

{

temp=mul;

buf[0]=temp%10;

temp=temp/10;

buf[l]=temp%10;

temp=temp/10;

buf[2]=temp;

if((buf[O]==buf[1])||(buf[0]—buf[2])|(buf[l]-buf[2]))

{

printf("%cT2=%d\n”,i,mul);

}

}

return0;

}

15.

#include<stdio.h>

intmain(void)

{

inta,b,c;

for(a=l;a<=3;a++)

for(b=l;b<=3;b++)

if(a!=b)

{

c=6-a-b;

if(c!=a&&c!=b)

if((a!=1)&&((c!=1)&&(c!=3))—1)

printf("a=%d,b=%d,c=%d”,a,b,c);

}

return0;

}

16.

#include<stdio.h>

intmain(void)

{

intk;

intn;

scanf("%d",&n);

k=(n%4==0)+(n%7==0)*2+(n%9==0)*4;

switch(k)

{

case7:

printf("all");

break;

case6:

printf(“7and9");

break;

case5:

printf("4and9");

break;

case4:

printf;

break;

case3:

printf("4and7");

break;

case2:

printf("7");

break;

case1:

printf(〃4〃);

break;

case0:

printf("none");

break;

)

return0;

)

17.

#include<stdio.h>

intmain(void)

inta,b,c,d;

printf("pleasethinkofanumberbetween1and100.\n");

printf(,zyournumberdividedby3hasaremainderof");

scanf&a);

printf(z/yournumberdividedby4hasaremainderof");

scanf&b);

printf(z/yournumberdividedby7hasaremainderof");

scanf('d”,&c);

printf("letmethinkamoment...\n");

d=36*c+28*a+2l*b;

while(d>84)

d=d-84;

z/,,

printf(yournumberwas%d\n,d);

return0;

}

18.

#include<stdio.h>

intmain(void)

intbuf[10];

inti,j;

intmul;

inttempi,temp2;

intbool:

for(i=5000;i〈=9999;i++)

{

bool=0;

for(j=0;j<10;j++)

buf[j]=0:

templ=i;

while(templ>0)

{

if((++buf[templ%10])>1)

]

bool=l;

break;

)

templ/=10;

}

if(bool==l)

continue;

mul=i*2;

temp2=mul;

while(temp2>0)

{

if((++buf[temp2%10])>l)

]

bool=l;

break;

}

temp2/=10;

}

if(bool==l)

continue:

printf("2*%d=%d\n”,i,mul);

}

return0;

}

19.

#include<stdio.h>

#include<stdlib.h>

intppow(inta,intb)

intmul=l;

inti;

for(i=0;i<b;i++)

{

mul=a*mul;

}

returnmul;

}

intmain(void)

{

intt;

charbuf[10];

inti,j,k;

intsum=0;

for(i=0;i<10;i++)

(

scanf&buf[i]);

if(buf[i]->\n')

break;

buf[i]=\0;;

for(j=0;j<i;j++)

if((buf[j]>=,0,)&&(buf[j]<=,9'))

bufEj]=buf[j]-48;

else

if((buf[j]〉='A')&&(buf[j]<='F'))

buf[j]=buf[j]-55;

else

exit(1);

}

k=0;

for(j=i-l;j>=0;j")

{

t=ppow(16,k);

sum=sum+t*(int)buf[j];

k++;

}

printf("%d\n",sum);

return0;

}

20.

#include<stdio.h>

intmain(void)

inta:

intb;

intc;

inti;

intbuf[10];

for(a=10;a<=99;a++)

{

for(i=0;i<10;i++)

buf[i]=0;

if((++buf[a%10]>l)||(++buf[a/10%10]>l))

continue;

for(b=100;b<=999;b++)

{

for(i=0;i<10;i++)

if((i!=a%10)&&i!=a/10%10)

buf[i]=0;

)

if((++buf[b%10]>l)||(++buf[b/10%10]>l)||(++buf[b/100%10]>l

))

continue;

c=a*b;

if(c<10000&&c>999)

if((++buf[c%10]>l)j(++buf[c/10%10]>l)'1(++buf[c/100%l

0]>l)||(++buf[c/1000%10]>l))

continue;

else

printf("%d*%d=%d\n”,a,b,c);

return0;

}

21.

#include<stdio.h>

intmain(void)

{

inta:

intb;

inti;

intt;

intbuf[10];

intbool;

for(a=317;a<l000;a++)

bool=0;

for(i=0;i<10;i++)

buf[i]=0;

if((++buf[a%10]>l)||(++buf[a/10%10]>l)||(++buf[a/100%10

]>D)

continue;

b=a*a;

t=b;

for(i=0;i<6;i++)

{

if(++buf[t%10]>l)

]

bool=l;

break;

)

t=t/10;

}

if(bool-l)

continue;

printf("%(T2=%d\n”,a,b);

return0;

22.

#include<stdio.h>

intmain(void)

(

intbuf[100];

inti;

intn;

intmax;

inttemp;

for(i=l;i<100;i++)

{

scanf("%d”,&buf[i]);

if(buf[i]=0)

break;

}

n=i;

max=buf[l]+buf[2]+buf[3]+buf[4];

for(i=2;i%10!=l;i++)

temp=buf[i%10]+buf[(i+l)%10]+buf[(i+2)%10]+buf[(i+3)%10

];

if(temp>max)

max=temp;

}

printf("max=%d\n”,max);

return0;

}

23.

#include<stdio.h>

voidnirnava(intn)

{

if(n<10)

printf(/z%d",n);

else

{

nirnava(n/10);

printf('%d”,n%10);

intmain(void)

intcount=0;

intn;

inti;

intt;

scanf&n);

t=n;

while(t>0)

{

printf(z/%d",t%10);

t=t/10;

count++;

}

printf('\n");

nirnava(n);

printf("\n%d位数\n”,count);

}

24.

#include<stdio.h>

intmain(void)

{

intbuf[4]={2,3,5,7};

inti,j,k,temp,m;

intbool;

intmul;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

for(k=0;k<4;k++)

for(m=0;m<4;m++)

(

bool=0;

mul=(buf[i]+buf[j]*10+buf[k]*100)*buf[m];

if(muKlOOO)

continue;

temp=mul;

while(temp>0)

(

if((temp%10—2)||(temp%10==3)(temp%10==5)|(temp%10==7))

{)

else

{

bool=l;

break;

temp/=10;

if(bool==0)

printf("%d%d%d*%d=%d\n”,buf[k],buf[j],buf[i],buf[m],mul);

)

)

return0;

}

25.

#include<stdio.h>

intmain(void)

{

intbuf[4]={2,3,5,7};

inti,j,k,m,n;

intbool;

intmul,mull,mul2;

inttemp,tempi,temp2;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

for(k=0;k<4;k++)

for(m=0;m<4;m++)

for(n=0;n<4;n++)

bool=0;

mul=(buf[i]+buf[j]*10+buf[k]*100)*(buf[m]+buf[n]*10);

mull=(buf[i]+buf[j]*10+buf[k]*100)*buf[m];

mul2=(mul-mull)/10;

if((mul<10000)||(mulKlOOO)||(mul2<1000))

continue;

temp=mul;

templ=mull;

temp2=mul2;

while(temp>0)

(

if((temp%10==2)|(temp%10==3)||(temp%10==5)||(temp%10—7))

()

else

(

bool=l;

break;

)

tempAlO;

if(bool==0)

while(templ>0)

if((templ%10==2)'(templ%10==3)||(templ%10==5)||(temp

l%10==7))

{}

else

{

bool=l;

break;

}

templ/=10;

)

)

if(bool==0)

while(temp2>0)

{

if((temp2%10==2)||(temp2%10==3)||(temp2%10==5)||(temp2%

10==7))

()

else

bool=l;

break;

)

temp2/=10;

}

if(bool==0)

(

printf(〃第一行:%d%d%d\n第二行:%d%d\n第三行:%d\n第四

行:机l\n第五行:

%d\n\n\n\n\n”,buf[i],buf[j],buf[k],buf[m],buf[n],mull,mul2,mu

1);

)

}

return0;

}

26.

#include<stdio.h>

〃从a到b是不是循环节

intis_xunhuan(int*buf,inta,intb)

{

inti;

if(a==b)

for(i=l;i<10;i++)

if(buf[a]—buf[a+i])

()

else

return0;

else

for(i=a;i〈=b;i++)

(

if(buf[i]-buf[i+b-a+1])

{}

else

(

return0;

return1;

intmain(void)

intbuf[1024];

intyushu;

intm,n;

inti,j,k;

scanf(z/%d%d/z,&m,&n);

yushu=m;

buf[0]=0;

i=l;

while(yushu!=0)

{

yushu=yushu*10;

buf[i]=yushu/n;

yushu=yushu%n;

i++;

if(i==1024)

break;

}

if(i<1024)

printf("有限小数\n");

printf("%d.”,buf[0]);

for(j=l;j<i;j++)

printf('%d”,buf[j]);

printf('\n");

}

else

{

printf("循环小数\n");

for(i=l;i<100;i++)

for(j=i;j<200;j++)

(

if(isxunhuan(buf,i,j))

(

printf("刎.buf[0]);

if(i>l)

{

for(k=l;k<i;k++)

printf('%d”,buf[k]);

}

printf("(");

for(k=i;k〈=j;k++)

printfbuf[k]);

printf(〃)〃);

printf('\n");

return0:

return0;

}

27.

#include<stdio.h>

intmain(void)

{

intn;

chareng[12][10]={“一月〃,〃二月〃,"三月〃,"四月〃,〃五月〃,"六月〃

七月","八月〃,〃九月〃,“十月〃,〃十一月〃,“十二月"};

scanf&n);

printf(z/%s\nz/,eng[n-l]);

return0;

}

第四章

1.

ttinclude<stdio.h>

intmain(void)

intbuf[100];

intn;

inti,j,k;

scanf("%d",&n);

for(i=0;i<n;i++)

buf[i]=2;

for(i=0;i<n-l;i++)

(

for(j=0;j<n-i-l;j++)

(

buf[j]+=2;

)

)

for(j=0;j<n;j++)

(

if(buf[j]>=10)

(

buf[j+l]+=buf[j]/10;

buf[j]=buf[j]%10;

}

)

for(i=n-l;i>=0;i­)

printf(绘d”,buf[i]);

printfC\n/z);

return0;

)

2.

#include<stdio.h>

intmain(void)

{

intn=2;

inti;

for(i=l;i<=9;i++)

(

n=(n+2)*2;

)

printf(绘d\n”,n);

return0;

)

3.

#include<stdio.h>

intmain(void)

(

inta=54;

intn;

intm;

printf(〃计算机先拿3张牌\n〃);

a=a-3;

while(a>=0)

(

printf(〃还剩%<1张牌\n〃,a);

printf(〃你拿几张?请输入:〃);

scanf&n);

if(n>4||n<l|In>a)

(

printf(〃错误!重新拿牌\n〃);

continue;

}

a=a-n;

printf(“还剩%d张牌\n〃,a);

if(a=0)

break;

m=5一n;

printf("计算机拿%d\n〃,m);

a=a-m;

)

return0;

)

4.

#include<stdio.h>

intd;

intal,a2;

intfun(intn);

intmain(void)

(

intn;

printffn=?,d=?,al=?,a2=?z,);

scanf(//%d%d%d%d\n,/,&n,&d,&al,&a2);

printf(线d\n〃,fun(n));

return0;

)

intfun(intn)

(

if(n==l)

returnal;

if(n==2)

returna2;

returnfun(n-2)-(fun(n-1)-d)*2;

5.

#include<stdio.h>

charchess[8][8];

intis_safe(introw,intcol);

intqueen(introw,intcol,intn);

intmain(void)

(

inti,j;

for(i=0;i<8;i++)

for(j=0;j<8;j++)

chess[i][j]='X';

queen(0,0,0);

for(i=0;i<8;i++)

(

for(j=0;j<8;j++)

printf(,z%c”,chess[i][j]);

printfC\nO;

)

return0;

)

intis_safe(introw,intcol)

(

inti,j;

for(i=0;i<8;i++)

(

if(chess[row][i]=二'Q')

return0;

if(chess[i][col]==,Q')

return0;

)

i=row;

j=col;

while(i!=-l&&j!=-l)

(

if(chess[i-][j―1—Q')

return0;

)

i=row;

j=col;

whiled!=-l&&j!=8)

(

if(chess[i―][j++]='Q')

return0;

i=row;

j=col;

while(i!=8&&j!=-l)

(

if(chess[i++][j--]='Q')

return0;

)

i=row;

j=col;

while(i!=8&&j!=8)

(

if(chess[i++][j++]=,Q')

return0;

)

return1;

)

intqueen(introw,intcol,intn)

(

inti,j;

intresult=0;

if(n==8)

return1;

else

if(is_safe(row,col))

(

chess[row][col]='Q';

for(i=0;i<8;i++)

for(j=0;j<8;j++)

(

result+=queen(i,j,n+1);

if(result>0)

break;

}

if(result>0)

return1;

else

{

chess[row][col]=,X';

return0;

}

else

return0;

}

6.

#include<stdio.h>

intmain(void)

(

inti,j,k;

for(i=l;i<=33;i++)

for(j=l;j<=50;j++)

(

k=100-i-j;

if(k%2==0)

(

if(3*i+2*j+k/2==100)

printf(〃大马%d\n中马%d\n小马%d\n\n\n”,i,j,k);

}

)

return0;

}

7.

#include<stdio.h>

intmain(void)

(

inti;

for(i=l;i<=10000;i++)

(

if(i%2==l&&i%3=2&&i%5=4&&i%6==5&&i%7=0)

printf("%d\n〃,i);

)

return0;

}

8.

#include<stdio.h>

intmain(void)

(

inti;

intsum;

intal,a2,a3,a4;

for(i=1000;i<=9999;i++)

al=i%10;

a2=i/10%10;

if(al!=a2)

a3=i/100%10;

if(al!=a3&&a2!=a3)

(

a4=i/1000;

if(al!=a4&&a2!=a4&&a3!=a4)

(

sum=(al+a2+a3+a4)*(al+a2+a3+a4);

if(i%sum==O)

printf(/z%d\n/z,i);

)

}

}

)

return0;

)

9.

#include<stdio.h>

^defineN10

voidmaxmin(int*a,intm,intn,intint*min2,int*maxl,int*max2);

intmain(void)

(

inta[N]={2,3,4,5,34,7,9,6,43,21);

intmini,min2;

intmaxi,max2;

max_min(a,0,NT,&minl,&min2,&max1,&max2);

printf(,/minl=%d\nmin2=%d\nmaxl=%d\nmax2=%d\n//,mini,min2,maxi,max2);

return0;

}

voidmaxmin(int*a,intm,intn,intint*min2,int*maxl,int*max2)

(

intIminl,lmin2,Imaxl,lmax2;

intrminl,rmin2,rmaxl,rmax2;

intmid;

if(m=n)

(

*minl=*n)in2=*maxl=*max2=a[m];

)

else

if(m==n-l)

(

if(a[m]<a[n])

{

*n)inl=a[m];

*min2=a[n];

*maxl=a[n];

*max2=a[m];

)

else

(

*minl=a[n];

*min2=a[m];

*maxl=a[m];

*max2=a[n];

)

)

else

(

mid二(m+n)/2;

max_min(a,m,mid,&lmin2,&lmaxl,&lmax2);

max_min(a,mid+1,n,&rminl,&rmin2,&rmaxl,&rmax2);

if(IminKrminl)

(

if(lmin2<rminl)

(

*min2=lmin2;

)

else

(

*minl=lminl;

*min2=rminl;

)

)

else

if(rmin2<lminl)

(

*minl=rminl;

*min2=rmin2;

}

else

(

*minl=rminl;

*min2=lminl;

)

if(lmaxl>rmaxl)

if(lmax2>rmaxl)

*maxl=lmaxl;

*max2=lmax2;

}

else

(

*maxl=lmaxl;

*max2=rmaxl;

}

)

else

if(rmax2>lmaxl)

(

*maxl=rmaxl;

*max2=rmax2;

}

else

(

*maxl=rmaxl;

*max2=lmaxl;

)

)

)

10.

#include<stdio.h>

intadd(int*a,intflag,intright);

intmain(void)

(

inta[10]={l,2,3,4,5,6,7,8,9,10);

intsum=add(a,0,9);

printf(,z%d\n,z,sum);

return0;

)

intadd(int*a,intflag,intright)

(

intmid;

if(flag==right)

(

returna[flag];

)

else

if(flag==right-l)

returna[flag]+a[right];

else

mid=(flag+right)/2;

returnadd(a,flag,mid)+add(a,mid+1,right);

)

}

11.

#include<stdio.h>

intmain(void)

(

inta[5][3]={

{-50,17,-42),

{-47,-19,-3),

{36,-34,-43},

{-30,-43,34},

{-23,-8,-45}

};

inti,j;

intmax,n;

intsum=0;

for(i=0;i<5;i++)

(

max=a[i][0];

n=0;

for(j=l;j<3;j++)

(

if(a[i][j]>max)

(

max=a[i][j];

n=j;

}

)

sum+=max;

printf(,za[%d][%d]=%d\nz,,i,n,max);

)

printfC/%d\n,/,sum);

return0;

)

12.

/*

*File:newmain.c

*Author:nirnava

*

*Createdon2010年4月22日,下午5:21

*/

#include<stdio.h>

#include<stdlib.h>

#defineN4

voidmatrix_mul(intint*mul2,int*mul3,intlength);

voidmatrix_add_sub(int*A,int*B,int*C,intm,charch);

voidupdate_half_value(int*A,int*B,intm);

voidget_half_value(int*A,int*B,intm);

intmain(void)

(

inti,j;

intmull[N*N]={1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6};

intmul2[N*N]={7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2};

intmu13[N*N];

matrix_mul(mull,mu12,mul3,N);

for(i=0;i<N*N;i++)

(

printf("%5d〃,mul3[i]);

if((i+l)%N==0)

printf(〃\n〃);

)

return0;

)

voidmatrix_add_sub(int*A,int*B,int*C,intm,charch)

(

inti;

for(i=0;i++)

(

if(ch==,+')

C[i]=A[i]4-B[i];

else

)

}

voidupdate_half_value(int*A,int*B,intm)

(

inti,j;

for(i=0;i<m/2;i++)

(

for(j=0;j<m/2;j++)

B[i*m+j]=A[i*m/2+j];

}

}

voidget_half_value(int*A,int*B,intm)

(

inti,j;

for(i=0;i<m/2;i++)

(

for(j=0;j<m/2;j++)

{

A[i*m/2+j]=B[i*m+j];

)

)

)

voidmatrix_mul(int*A,int*B,int*C,intm)

(

if(m==2)

(

intD,E,F,G,H,I,J;

D=A[0]*(B[l]-B[3]);

E=A[3]*(B[2]-B[0]);

F=(A[2]+A[3])*B[0]:

G=(A[0]+A[l])*B[3];

H=(A[2]-A[0])*(B[0]+B[l]);

I=(A[1]-A[3])*(B[2]+B[3]);

J=(A[0]+A[3])*(B[0]+B[3]);

C[0]=E+I+J-G;

C[1]=D+G;

C[2]=E+F;

C[3]=D+H+J-F;

return;

)

else

(

intAl,A2,A3[m*m/4],A4[m*m/4];

intBl[m*m/4],B2[m*m/4],B3[m*m/4],B4[m*m/4];

intCl[m*m/4],C2[m*m/4],C3[m*m/4],C4[m*m/4];

intD[m*m/4],E[m*m/4],F[m*m/4],G[m*m/4],H,I,J[m*m/4];

inttempitemp2[m*m/4];

get_half_value(Al,&A[0],m);

gethalfvalue(A2,&A[m/2],m);

get_half_value(A3,&A[m*m/2],m);

gethalfvalue(A4,&A[m*m/2+m/2],m);

get_half_value(B1,&B[0],m);

get_half_value(B2,&B[m/2],m);

get_half_value(B3,&B,m);

get_half_value(B4,&B[m*m/2+m/2],m);

matrix_add_sub(B2,B4,tempi,m/2,',);

matrix_mul(Al,tempi,D,m/2);

matrix_add_sub(B3,Bl,tempi,m/2,';

matrix_mul(A4,tempi,E,m/2);

matrix_add_sub(A3,A4,tempi,m/2,';

matrix_mul(tempi,Bl,F,m/2);

matrix_add_sub(Al,A2,tempi,m/2,';

matrixmul(tempi,B4,G,m/2);

matrix_add_sub(A3,Al,tempi,m/2,'」);

matrix_add_sub(B1,B2,temp2,m/2,';

matrix_mul(tempi,temp2,H,m/2);

matrix_add_sub(A2,A4,tempi,m/2,';

matrix_add_sub(B3,B4,temp2,m/2,';

matrix_mul(tempi,temp2,1,m/2);

matrix_add_sub(Al,A4,tempi,m/2,';

matrixaddsub(Bl,B4,temp2,m/2,';

matrix_mul(tempi,temp2,J,m/2);

matrixaddsub(E,I,tempi,m/2,';

matrix_add_sub(J,G,temp2,m/2,1-);

matrix_add_sub(temp1,temp2,Cl,m/2,';

matrix_add_sub(D,G,C2,m/2,';

matrix_add_sub(E,F,C3,m/2,';

matrix_add_sub(D,H,tempi,m/2,';

matrixaddsub(J,F,temp2,m/2,‘,);

matrix_add_sub(tempi,temp2,C4,m/2,';

updatehalfvalue(Cl,&C[0],m);

update_half_value(C2,&C[m/2],m);

updatehalfvalue(C3,&C[m*m/2],m);

update_half_value(C4,&C[m*m/2+m/2],m);

return;

)

}

13.

#include<stdio.h>

intmain(void)

(

inta[6][7]={

{16,4,3,12,6,0,3),

{4,-5,6,7,0,0,2),

(6,0,-1,-2,3,6,8),

{5,3,4,0,0,-2,7),

{-1,7,4,0,7,-5,6},

(0,-1,3,4,12,4,2}

);

intb[6][7],c[6][7];

inti,j,k;

intmax;

intflag;

inttemp;

for(i=0;i<6;i++)

for(j=0;j<7;j++)

(

b[i][j]=a[i][j];

c[i]

)

for(i=l;i<5;i++)

(

for(j=0;j<7;j++)

(

max=0;

for(k=j-2;k<=j+2;k++)

(

if(k<0)

continue;

else

if(k>6)

break;

else

{

if(b[i][j]+b[i-l][k]>max)

{

max=b[i][j]+b[i-l][k];

flag=k;

)

)

)

b[i][j]=max;

c[i][j]=flag;

)

)

for(j=l;j<=5;j++)

(

max=0;

for(k=j-2;k<=j+2;k++)

if(k<0)

continue;

else

if(k>6)

break;

else

(

if(b[i][j]+b[i-l][k]>max)

(

max=b[i][j]+b[i-l][k];

flag=k;

)

)

)

b[i][j]=max;

c[i][j]=flag;

)

max=0;

for(j=l;j<=5;j++)

(

if(b[i][j]>max)

(

max=b[i][j];

flag=j;

)

)

printf(〃%d\n〃,max);

temp=c[i][flag];

printf("%5d〃,a[i][temp]);

for(j=i;j>0;j—)

(

temp=c[j][temp];

printf("%5d”,a[j-l][temp]);

)

printf(〃\n〃);

return0;

)

14.

#include<stdio.h>

intmain(void)

intA[6]={0,3,7,9,12,13};

intB[6]={0,5,10,11,11,11);

intC[6]={0,4,6,11,12,12);

intAB[6][6];

inttemp[6];

intabc[6];

intmax;

intflag;

inti,j,k;

for(i=0;i<=5;i++)

(

max=O;

for(j=0;j<=i;j++)

(

AB[i][j]=A[i-j>B[j];

if(AB[i][j]>max)

max=AB[i][j];

)

temp[i]=max;

)

max=0;

for(i=0;i<=5;i++)

(

abc[i]=temp[i]+C[5-i];

if(abc[i]>max)

(

max=a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论