常用算法设计方法
要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然 后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述, 其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和
iKa3J==as)flag3n 1;
一 f(sag3)
(flag4*
dwnda+db+db;
dzndw」
dzAdz—dz 汶 1 ooy _ 00;
for(H-7-AH9u-H-)
pEHdz 汶 19
dzu(dz—dz 汶 一 oy 12
for(m=O ;m<=8 ;m++)
fbr(n=m+1 ;n<=9;n++) ifi(a[m]==a[n])flag4=l;
} if(!flag4) {
printf(,,A=%d\n,,,a[4]); /*2*/ printf(”B=%d\n”,a[3]); /*9*/ print町 C=%d\n”,a[2]); /*7*/ printf(HD=%d\nH,a[l]); /*8*/ printf(nE=%d\nn,a[O]); /*6*/ printf(nF=%d\nn,a[6]); 1*5*1 print町 G=%d\n”,a[5]); /*0*/ print町 X=%d\n”,a[9]); 1*3*1 printf(HY=%d\nH,a[8]); /* 1 */ printf(nZ=%d\nn,a[7]); /*4*/ break;
}
}
}
}
}
} getch(); return 0;
}
参考程序2
void NumAnalyse(){
int a,b,c,d,e,f,g,x,y,z;
for(a=0;a<10;a++) for(b=0;b<10;b++) if(b==a) continue;
else
for(c=0;c<10;c++) if(c==a || c==b) continue; else for(d=0;d<10;d++) if(d==a 11 d==b 11 d==c) continue; else
for(e=0;e<10;e++)
if(e==a 11 s==b 11 e==c ||e==d)
continue;
else
for(f=0;f<10;f++)
if(f==a || f==b || f==c || f==d || f==s)
continue;
else
for(g=0;g<10;g++)
if(g==a II g==b || g==c || g==d || g==e || g==f)
continue;
else
for(x=0;x<10;x++)
if(x==a 11 x==b 11 x==c 11 x==d ||x==e 11 x==f 11 x==g)
continue;
else
for(y=0;y<10;y++)
if(y==a || y==b || y==c ||y==d||y==e||y==f||y==g||y==x)
continue;
else
{
z=45-a-b-c-d-e-f-g-x-y;
if(a*10000+b*1000+c*100+d*10+e + d*1OO+f*1O+g+d*1OO+f*10+g
==x*10000+y*1000+z*100+d*10+e)
printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d,g=%d,x=%d,y=%d,z=%d\n",a,b,c ,d,e,f,g,x,y,z);
main()
{
NumAnalyse();
getchar();
三、递推法
递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模 为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问 题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得 的规模为1, 2,…,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或 i=l出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模 为N的解。
【问题】阶乘计算
问题描述:编写程序,对给定的n (nS 100),计算并输出k的阶乘k! (k=l, 2, •••, n) 的全部有效数字。
由于要求的整数可能大大超出一般整数的位数,程序用一维数组存储长整数,存储长整 数数组的每个元素只存储长整数的一位数字。如有m位成整数N用数组a[]存储:
N=a[m]X10m-l+a[m-l]X10m-2+ +a[2]X101+a[l]X
程序设计竞赛常用算法 来自淘豆网m.daumloan.com转载请标明出处.