﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天空之城-随笔分类-c++</title><link>http://www.cppblog.com/linhong34/category/1916.html</link><description>  new,think,program,happy to live</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 17:08:44 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 17:08:44 GMT</pubDate><ttl>60</ttl><item><title>打印菱形（经典）</title><link>http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Sun, 04 Jun 2006 10:00:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/8152.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/8152.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/8152.html</trackback:ping><description><![CDATA[
		<p>#include &lt;stdio.h&gt;<br />void main()<br />{<br />    int i,m=1;<br />    for(i=0;i&lt;19;i++) <br />    {<br />//  %*s\n *表示控制宽度，s字符串 <br />//  m&lt;=10?10+m :30-m 表示输出的位置，<br />//  (m&lt;=10?20-2*m:2*m-20)控制输出的个数<br />printf("%*s\n",m&lt;=10?10+m :30-m ,"*******************"+(m&lt;=10?20-2*m:2*m-20)<br />      );<br />        m++;        <br />    }</p>
		<p>} <br /></p>
<img src ="http://www.cppblog.com/linhong34/aggbug/8152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-06-04 18:00 <a href="http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C程序设计的常用算法 </title><link>http://www.cppblog.com/linhong34/archive/2006/05/26/7709.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Fri, 26 May 2006 14:34:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/05/26/7709.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/7709.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/05/26/7709.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/7709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/7709.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="96%" align="center" border="0">
				<tbody>
						<tr>
								<td style="LINE-HEIGHT: 200%" valign="top" height="538">
										<div id="detail_content">
												<p>　　算法（Algorithm）：计算机解题的基本思想方法和步骤。算法的描述：是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述，包括需要什么数据（输入什么数据、输出什么结果）、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。<br /><br />　　一、计数、求和、求阶乘等简单算法 <br /><br />　　此类问题都要使用循环，要注意根据问题确定循环变量的初值、终值或结束条件，更要注意用来表示计数、和、阶乘的变量的初值。 <br /><br />　　例：用随机函数产生100个[0，99]范围内的随机整数，统计个位上的数字分别为1，2，3，4，5，6，7，8，9，0的数的个数并打印出来。 <br /><br />　　本题使用数组来处理，用数组a[100]存放产生的确100个随机整数，数组x[10]来存放个位上的数字分别为1，2，3，4，5，6，7，8，9，0的数的个数。即个位是1的个数存放在x[1]中，个位是2的个数存放在x[2]中，……个位是0的个数存放在x[10]。 <br /><br />void main() <br />{ int a[101],x[11],i,p; <br />for(i=0;i&lt;=11;i++) <br />x[i]=0; <br />for(i=1;i&lt;=100;i++) <br />{ a[i]=rand() % 100; <br />printf("%4d",a[i]); <br />if(i%10==0)printf("\n"); <br />} <br />for(i=1;i&lt;=100;i++) <br />{ p=a[i]%10; <br />if(p==0) p=10; <br />x[p]=x[p]+1; <br />} <br />for(i=1;i&lt;=10;i++) <br />{ p=i; <br />if(i==10) p=0; <br />printf("%d,%d\n",p,x[i]); <br />} <br />printf("\n"); <br />} <br /><br />　　二、求两个整数的最大公约数、最小公倍数 <br /><br />　　分析：求最大公约数的算法思想：(最小公倍数=两个整数之积/最大公约数) <br />(1) 对于已知两数m，n，使得m&gt;n； <br />(2) m除以n得余数r； <br />(3) 若r=0，则n为求得的最大公约数，算法结束；否则执行(4)； <br />(4) m←n，n←r，再重复执行(2)。 <br />例如: 求 m=14 ,n=6 的最大公约数. m n r <br />14 6 2 <br />6 2 0 <br />void main() <br />{ int nm,r,n,m,t; <br />printf("please input two numbers:\n"); <br />scanf("%d,%d",&amp;m,&amp;n); <br />nm=n*m; <br />if (m&lt;n) <br />{ t=n; n=m; m=t; } <br />r=m%n; <br />while (r!=0) <br />{ m=n; n=r; r=m%n; } <br />printf("最大公约数:%d\n",n); <br />printf("最小公倍数:%d\n",nm/n); <br />} <br /><br />　　三、判断素数 <br /><br />　　只能被1或本身整除的数称为素数 基本思想：把m作为被除数，将2—INT（ ）作为除数，如果都除不尽，m就是素数，否则就不是。（可用以下程序段实现） <br />void main() <br />{ int m,i,k; <br />printf("please input a number:\n"); <br />scanf("%d",&amp;m); <br />k=sqrt(m); <br />for(i=2;i&lt;k;i++) <br />if(m%i==0) break; <br />if(i&gt;=k) <br />printf("该数是素数"); <br />else <br />printf("该数不是素数"); <br />} <br />将其写成一函数,若为素数返回1，不是则返回0 <br />int prime( m%) <br />{int i,k; <br />k=sqrt(m); <br />for(i=2;i&lt;k;i++) <br />if(m%i==0) return 0; <br />return 1; <br />} <br /><br />　　四、验证哥德巴赫猜想 <br /><br />　　（任意一个大于等于6的偶数都可以分解为两个素数之和） <br />基本思想：n为大于等于6的任一偶数，可分解为n1和n2两个数，分别检查n1和n2是否为素数，如都是，则为一组解。如n1不是素数，就不必再检查n2是否素数。先从n1=3开始，检验n1和n2（n2=N-n1）是否素数。然后使n1+2 再检验n1、n2是否素数，… 直到n1=n/2为止。 <br /><br />　　利用上面的prime函数，验证哥德巴赫猜想的程序代码如下： <br />#include "math.h" <br />int prime(int m) <br />{ int i,k; <br />k=sqrt(m); <br />for(i=2;i&lt;k;i++) <br />if(m%i==0) break; <br />if(i&gt;=k) <br />return 1; <br />else <br />return 0; <br />} <br /><br />main() <br />{ int x,i; <br />printf("please input a even number(&gt;=6):\n"); <br />scanf("%d",&amp;x); <br />if (x&lt;6||x%2!=0) <br />printf("data error!\n"); <br />else <br />for(i=2;i&lt;=x/2;i++) <br />if (prime(i)&amp;&amp;prime(x-i)) <br />{ <br />printf("%d+%d\n",i,x-i); <br />printf("验证成功!"); <br />break; <br />} <br />} <br /><br />　　五、排序问题 <br /><br />　　1．选择法排序（升序） <br /><br />　　基本思想： <br />1）对有n个数的序列（存放在数组a(n)中），从中选出最小的数，与第1个数交换位置； <br />2）除第1 个数外，其余n-1个数中选最小的数，与第2个数交换位置； <br />3）依次类推，选择了n-1次后，这个数列已按升序排列。 <br /><br />程序代码如下： <br />void main() <br />{ int i,j,imin,s,a[10]; <br />printf("\n input 10 numbers:\n"); <br />for(i=0;i&lt;10;i++) <br />scanf("%d",&amp;a[i]); <br />for(i=0;i&lt;9;i++) <br />{ imin=i; <br />for(j=i+1;j&lt;10;j++) <br />if(a[imin]&gt;a[j]) imin=j; <br />if(i!=imin) <br />{s=a[i]; a[i]=a[imin]; a[imin]=s; } <br />printf("%d\n",a[i]); <br />} <br />} <br /><br />　　2．冒泡法排序（升序） <br /><br />　　基本思想：(将相邻两个数比较，小的调到前头) <br />1）有n个数（存放在数组a(n)中），第一趟将每相邻两个数比较，小的调到前头，经n-1次两两相邻比较后，最大的数已“沉底”，放在最后一个位置，小数上升“浮起”； <br />2）第二趟对余下的n-1个数（最大的数已“沉底”）按上法比较，经n-2次两两相邻比较后得次大的数； <br />3）依次类推，n个数共进行n-1趟比较，在第j趟中要进行n-j次两两比较。 <br />程序段如下 <br />void main() <br />{ int a[10]; <br />int i,j,t; <br />printf("input 10 numbers\n"); <br />for(i=0;i&lt;10;i++) <br />scanf("%d",&amp;a[i]); <br />printf("\n"); <br />for(j=0;j&lt;=8;j++) <br />for(i=0;i&lt;9-j;i++) <br />if(a[i]&gt;a[i+1]) <br />{t=a[i];a[i]=a[i+1];a[i+1]=t;} <br />printf("the sorted numbers:\n"); <br />for(i=0;i&lt;10;i++) <br />printf("%d\n",a[i]); <br />} <br /><br />　　3．合并法排序（将两个有序数组A、B合并成另一个有序的数组C，升序） <br /><br />　　基本思想： <br />1）先在A、B数组中各取第一个元素进行比较，将小的元素放入C数组； <br />2）取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较，重复上述比较过程，直到某个数组被先排完； <br />3）将另一个数组剩余元素抄入C数组，合并排序完成。 <br />程序段如下： <br />void main() <br />{ int a[10],b[10],c[20],i,ia,ib,ic; <br />printf("please input the first array:\n"); <br />for(i=0;i&lt;10;i++) <br />scanf("%d",&amp;a[i]); <br />for(i=0;i&lt;10;i++) <br />scanf("%d",&amp;b[i]); <br />printf("\n"); <br />ia=0;ib=0;ic=0; <br />while(ia&lt;10&amp;&amp;ib&lt;10) <br />{ if(a[ia]&lt;b[ib]) <br />{ c[ic]=a[ia];ia++;} <br />else <br />{ c[ic]=b[ib];ib++;} <br />ic++; <br />} <br />while(ia&lt;=9) <br />{ c[ic]=a[ia]; <br />ia++;ic++; <br />} <br />while(ib&lt;=9) <br />{ c[ic]=b[ib]; <br />b++;ic++; <br />} <br />for(i=0;i&lt;20;i++) <br />printf("%d\n",c[i]); <br />} <br /><br />　　六、查找问题 <br /><br />　　1．①顺序查找法（在一列数中查找某数x） <br /><br />　　基本思想：一列数放在数组a[1]---a[n]中，待查找的数放在x 中，把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标，p初值为1，使x与a[p]比较，如果x不等于a[p]，则使p=p+1，不断重复这个过程；一旦x等于a[p]则退出循环；另外，如果p大于数组长度，循环也应该停止。（这个过程可由下语句实现） <br />void main() <br />{ int a[10],p,x,i; <br />printf("please input the array:\n"); <br />for(i=0;i&lt;10;i++) <br />scanf("%d",&amp;a[i]); <br />printf("please input the number you want find:\n"); <br />scanf("%d",&amp;x); <br />printf("\n"); <br />p=0; <br />while(x!=a[p]&amp;&amp;p&lt;10) <br />p++; <br />if(p&gt;=10) <br />printf("the number is not found!\n"); <br />else <br />printf("the number is found the no%d!\n",p); <br />} <br />思考：将上面程序改写一查找函数Find，若找到则返回下标值，找不到返回-1 <br />②基本思想：一列数放在数组a[1]---a[n]中，待查找的关键值为key，把key与a数组中的元素从头到尾一一进行比较查找，若相同，查找成功，若找不到，则查找失败。(查找子过程如下。index：存放找到元素的下标。) <br />void main() <br />{ int a[10],index,x,i; <br />printf("please input the array:\n"); <br />for(i=0;i&lt;10;i++) <br />scanf("%d",&amp;a[i]); <br />printf("please input the number you want find:\n"); <br />scanf("%d",&amp;x); <br />printf("\n"); <br />index=-1; <br />for(i=0;i&lt;10;i++) <br />if(x==a[i]) <br />{ index=i; break; <br />} <br />if(index==-1) <br />printf("the number is not found!\n"); <br />else <br />printf("the number is found the no%d!\n",index); <br />} <br /><br />　　2．折半查找法（只能对有序数列进行查找） <br /><br />　　基本思想：设n个有序数（从小到大）存放在数组a[1]----a[n]中，要查找的数为x。用变量bot、top、mid 分别表示查找数据范围的底部（数组下界）、顶部（数组的上界）和中间，mid=(top+bot)/2，折半查找的算法如下： <br />（1）x=a(mid)，则已找到退出循环，否则进行下面的判断； <br />（2）x&lt;a(mid)，x必定落在bot和mid-1的范围之内，即top=mid-1； <br />（3）x&gt;a(mid)，x必定落在mid+1和top的范围之内，即bot=mid+1； <br />（4）在确定了新的查找范围后，重复进行以上比较，直到找到或者bot&lt;=top。 <br />将上面的算法写成如下程序： <br />void main() <br />{ <br />int a[10],mid,bot,top,x,i,find; <br />printf("please input the array:\n"); <br />for(i=0;i&lt;10;i++) <br />scanf("%d",&amp;a[i]); <br />printf("please input the number you want find:\n"); <br />scanf("%d",&amp;x); <br />printf("\n"); <br />bot=0;top=9;find=0; <br />while(bot&lt;top&amp;&amp;find==0) <br />{ mid=(top+bot)/2; <br />if(x==a[mid]) <br />{find=1;break;} <br />else if(x&lt;a[mid]) <br />top=mid-1; <br />else <br />bot=mid+1; <br />} <br />if (find==1) <br />printf("the number is found the no%d!\n",mid); <br />else <br />printf("the number is not found!\n"); <br />} <br /><br />　　七、插入法 <br /><br />　　把一个数插到有序数列中，插入后数列仍然有序 <br /><br />　　基本思想：n个有序数（从小到大）存放在数组a(1)—a(n)中，要插入的数x。首先确定x插在数组中的位置P；（可由以下语句实现） <br />#define N 10 <br />void insert(int a[],int x) <br />{ int p, i; <br />p=0; <br />while(x&gt;a[p]&amp;&amp;p&lt;N) <br />p++; <br />for(i=N; i&gt;p; i--) <br />a[i]=a[i-1]; <br />a[p]=x; <br />} <br />main() <br />{ int a[N+1]={1,3,4,7,8,11,13,18,56,78}, x, i; <br />for(i=0; i&lt;N; i++) printf("%d,", a[i]); <br />printf("\nInput x:"); <br />scanf("%d", &amp;x); <br />insert(a, x); <br />for(i=0; i&lt;=N; i++) printf("%d,", a[i]); <br />printf("\n"); <br />} <br /><br />　　八、矩阵（二维数组）运算 <br /><br />（1）矩阵的加、减运算 <br />C(i,j)=a(i,j)+b(i,j) 加法 <br />C(i,j)=a(i,j)-b(i,j) 减法 <br />（2）矩阵相乘 <br />（矩阵A有M*L个元素，矩阵B有L*N个元素，则矩阵C=A*B有M*N个元素）。矩阵C中任一元素 (i=1,2,…,m; j=1,2,…,n) <br />#define M 2 <br />#define L 4 <br />#define N 3 <br />void mv(int a[M][L], int b[L][N], int c[M][N]) <br />{ int i, j, k; <br />for(i=0; i&lt;M; i++) <br />for(j=0; j&lt;N; j++) <br />{ c[i][j]=0; <br />for(k=0; k&lt;L; k++) <br />c[i][j]+=a[i][k]*b[k][j]; <br />} <br />} <br />main() <br />{ int a[M][L]={{1,2,3,4},{1,1,1,1}}; <br />int b[L][N]={{1,1,1},{1,2,1},{2,2,1},{2,3,1}}, c[M][N]; <br />int i, j; <br />mv(a,b,c); <br />for(i=0; i&lt;M; i++) <br />{ for(j=0; j&lt;N; j++) <br />printf("%4d", c[i][j]); <br />printf("\n"); <br />} <br />} <br />（3）矩阵传置 <br />例:有二维数组a(5,5)，要对它实现转置，可用下面两种方式： <br />#define N 3 <br />void ch1(int a[N][N]) <br />{ int i, j, t; <br />for(i=0; i&lt;N; i++) <br />for(j=i+1; j&lt;N; j++) <br />{ t=a[i][j]; <br />a[i][j]=a[j][i]; <br />a[j][i]=t; <br />} <br />} <br />void ch2(int a[N][N]) <br />{ int i, j, t; <br />for(i=1; i&lt;N; i++) <br />for(j= 0; j&lt;i; j++) <br />{ t=a[i][j]; <br />a[i][j]=a[j][i]; <br />a[j][i]=t; <br />} <br />} <br />main() <br />{ int a[N][N]={{1,2,3},{4,5,6},{7,8,9}}, i, j; <br />ch1(a); /*或ch2(a);*/ <br />for(i=0; i&lt;N; i++) <br />{ for(j=0; j&lt;N; j++) <br />printf("%4d", a[i][j]); <br />printf("\n"); <br />} <br />} <br />（4）求二维数组中最小元素及其所在的行和列 <br />基本思路同一维数组，可用下面程序段实现（以二维数组a[3][4]为例）： <br />‘变量max中存放最大值，row,column存放最大值所在行列号 <br />#define N 4 <br />#define M 3 <br />void min(int a[M][N]) <br />{ int min, row, column, i, j; <br />min=a[0][0]; <br />row=0; <br />column=0; <br />for(i=0; i&lt;M; i++) <br />for(j=0; j&lt;N; j++) <br />if(a[i][j]&lt;min) <br />{ min=a[i][j]; <br />row=i; <br />column=j; <br />} <br />printf("Min=%d\nAt Row%d,Column%d\n", min, row, column); <br />} <br />main() <br />{ int a[M][N]={{1,23,45,-5},{5,6,-7,6},{0,33,8,15}}; <br />min(a); <br />} <br /><br />　　九、迭代法 <br /><br />　　算法思想：对于一个问题的求解x，可由给定的一个初值x0，根据某一迭代公式得到一个新的值x1，这个新值x1比初值x0更接近要求的值x；再以新值作为初值，即：x1→x0,重新按原来的方法求x1,重复这一过和直到|x1-x0|&lt;ε(某一给定的精度)。此时可将x1作为问题的解。 <br />例：用迭代法求某个数的平方根。 已知求平方根的迭代公式为： <br />#include&lt;math.h&gt; <br />float fsqrt(float a) <br />{ float x0, x1; <br />x1=a/2; <br />do{ <br />x0=x1; <br />x1=0.5*(x0+a/x0); <br />}while(fabs(x1-x0)&gt;0.00001); <br />return(x1); <br />} <br />main() <br />{ float a; <br />scanf("%f", &amp;a); <br />printf("genhao =%f\n", fsqrt(a)); <br />} <br /><br />　　十、数制转换 <br /><br />　　将一个十进制整数m转换成 →r(2－16)进制字符串。 <br /><br />　　方法：将m不断除 r 取余数，直到商为零，以反序得到结果。下面写出一转换函数，参数idec为十进制数，ibase为要转换成数的基（如二进制的基是2，八进制的基是8等），函数输出结果是字符串。 <br />char *trdec(int idec, int ibase) <br />{ char strdr[20], t; <br />int i, idr, p=0; <br />while(idec!=0) <br />{ idr=idec % ibase; <br />if(idr&gt;=10) <br />strdr[p++]=idr-10+65; <br />else <br />strdr[p++]=idr+48; <br />idec/=ibase; <br />} <br />for(i=0; i&lt;p/2; i++) <br />{ t=strdr[i]; <br />strdr[i]=strdr[p-i-1]; <br />strdr[p-i-1]=t; <br />} <br />strdr[p]=’\0’; <br />return(strdr); <br />} <br />main() <br />{ int x, d; <br />scanf("%d%d", &amp;x, &amp;d); <br />printf("%s\n", trdec(x,d)); <br />} <br /><br />　　十一、字符串的一般处理 <br /><br />　　1．简单加密和解密 <br />加密的思想是： 将每个字母C加（或减）一序数K，即用它后的第K个字母代替，变换式公式： c=c+k <br />例如序数k为5，这时 A→ F， a→f，B→?G… 当加序数后的字母超过Z或z则 c=c+k -26 <br />例如：You are good→ Dtz fwj ltti <br />解密为加密的逆过程 <br />将每个字母C减（或加）一序数K，即 c=c-k, <br />例如序数k为5，这时 Z→U，z→u，Y→T… 当加序数后的字母小于A或a则 c=c-k +26 <br />下段程序是加密处理： <br />#include&lt;stdio.h&gt; <br />char *jiami(char stri[]) <br />{ int i=0; <br />char strp[50],ia; <br />while(stri[i]!=’\0’) <br />{ if(stri[i]&gt;=’A’&amp;&amp;stri[i]&lt;=’Z’) <br />{ ia=stri[i]+5; <br />if (ia&gt;’Z’) ia-=26; <br />} <br />else if(stri[i]&gt;=’a’&amp;&amp;stri[i]&lt;=’z’) <br />{ ia=stri[i]+5; <br />if (ia&gt;’z’) ia-=26; <br />} <br />else ia=stri[i]; <br />strp[i++]=ia; <br />} <br />strp[i]=’\0’; <br />return(strp); <br />} <br />main() <br />{ char s[50]; <br />gets(s); <br />printf("%s\n", jiami(s)); <br />} <br />2．统计文本单词的个数 <br />输入一行字符，统计其中有多少个单词，单词之间用格分隔开。 <br />算法思路： <br />（1）从文本（字符串）的左边开始，取出一个字符；设逻辑量word表示所取字符是否是单词内的字符，初值设为0 <br />（2）若所取字符不是“空格”，“逗号”，“分号”或“感叹号”等单词的分隔符，再判断word是否为1，若word不为1则表是新单词的开始，让单词数num = num +1，让word =1; <br />（3）若所取字符是“空格”，“逗号”，“分号”或“感叹号”等单词的分隔符， 则表示字符不是单词内字符，让word=0; <br />(4) 再依次取下一个字符，重得（2）(3)直到文本结束。 <br />下面程序段是字符串string中包含的单词数 <br />#include "stdio.h" <br />main() <br />{char c,string[80]; <br />int i,num=0,word=0; <br />gets(string); <br />for(i=0;(c=string[i])!='\0';i++) <br />if(c==' ') word=0; <br />else if(word==0) <br />{ word=1; <br />num++;} <br />printf("There are %d word in the line.\n",num); <br />} <br /><br />　　十二、穷举法 <br />　　<br />　　穷举法（又称“枚举法”）的基本思想是：一一列举各种可能的情况，并判断哪一种可能是符合要求的解，这是一种“在没有其它办法的情况的方法”，是一种最“笨”的方法，然而对一些无法用解析法求解的问题往往能奏效，通常采用循环来处理穷举问题。 <br />例： 将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞，要求每种零钞不少于1张，问有哪几种组合？ <br />main() <br />{ int i, j, k; <br />printf(" 5元 1元 5角\n"); <br />for(i=1; i&lt;=20; i++) <br />for(j=1; j&lt;=100-i; j++) <br />{ k=100-i-j; <br />if(5*i+1*j+0.5*k==100) <br />printf(" %3d %3d %3d\n", i, j, k); <br />} <br />} <br /><br />　　十三、递归算法 <br />　　<br />　　用自身的结构来描述自身，称递归 <br />　　<br />　　VB允许在一个Sub子过程和Function过程的定义内部调用自己，即递归Sub子过程和递归Function函数。递归处理一般用栈来实现，每调用一次自身，把当前参数压栈，直到递归结束条件；然后从栈中弹出当前参数，直到栈空。 <br />递归条件：（1）递归结束条件及结束时的值；（2）能用递归形式表示，且递归向终止条件发展。 <br />例：编fac(n)=n! 的递归函数 <br />int fac(int n) <br />{ if(n==1) <br />return(1); <br />else <br />return(n*fac(n-1)); <br />} <br />main() <br />{ int n; <br />scanf("%d", &amp;n); <br />printf("n!=%d\n", fac(n)); <br />} <br /></p>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/linhong34/aggbug/7709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-05-26 22:34 <a href="http://www.cppblog.com/linhong34/archive/2006/05/26/7709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WEB技术资源站点 </title><link>http://www.cppblog.com/linhong34/archive/2006/05/16/7274.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Tue, 16 May 2006 11:59:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/05/16/7274.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/7274.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/05/16/7274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/7274.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/7274.html</trackback:ping><description><![CDATA[
		<p>1.中国站长站：http://www.chinaz.com   <br />  站长站以专业提供站长相关资源下载而出名，可以说做得也不是很早，但现在人气很旺，下载资源更新很快，有很多的服务器下载点，下载速度也不错，提供收费下载通道，站点知名度及竞争力都在国内同类站点领先。对于站长来说的确已经不错，特别是论坛交流。但对于WEB技术资源来说，是否还缺一些除了下载外，其它的东东呢：）。   <br />    <br />  2.中国WEB开发者网络：http://www.webasp.net   <br />  一个新起的站点，以提供WEB开发相关技术资源为主，最大的特色是其文档资源真的很多，栏目丰富，包括在线软件供求之类的，源码资源也比较多，更新也比较快，下载点有几个，但速度有点慢，提供收费下载通道，这个站现在还没什么名气，人气比较差，可能是新站没什么宣传，但应该具有很强的竞争力。   <br />    <br />  3,源码之家：http://www.mycodes.net   <br />  比较早的源码下载站点，源码比较多，有三个下载点，全部http下载，速度不错，更新速度比较快，应该说站点的知名度也是很高的，但也是专门提供下载服务及论坛，无其它技术栏目，站点人气也不错，具有较强的竞争力。   <br />    <br />  4.ASP300：http://www.asp300.com   <br />  国内做的很早的下载站之一，专业提供asp代码下载，是比较早进行收费的代码下载站点，很多人都说其“拿别人站点免费代码当商业代码”，今年进行一次改版，整个感觉不错，更新速度较快，一个下载点，下载速度也不错，下载资源库存也比较大，但很多需是收费会员才能下载。知名度比较高，但现在人气比较差，一般现在很多都是看其知名度去的。如果告别免费能让大家接受，那么其竞争力是比较强的。   <br />    <br />  5.中国源码中心：http://www.cncode.com   <br />  也是比较早的源码下载站点，只提供下载和论坛服务，现有源码容量一般，一个下载点，速度比较慢，一直以来都没什么起色，老字号，更新速度还可以，人气一般，但知名度比较高，所以现在还是比较多人去的，具有较强的竞争力。   <br />    <br />  6.源码吧：http://www.yuanma8.com   <br />  一个新起的站点，专门提供源码下载服务，现有库存容量一般，一个下载点，速度一般，感觉建站好象没多长时间，但现在人气也还不错。现在有一定的知名度，不长时间能做到这样，受益于其好记的站名外，更主要的是其站点的管理团队应该不错，具有较强的竞争力。   <br />    <br />  7.时代者：http://www.im86.com   <br />  主要提供源码下载服务，现库存源码容量一般，一个下载点，下载速度比较快，更新也比较快，人气也还不错。有一定的知名度，具有较强的竞争力。   <br />    <br />  8.源码联盟：http://www.aspsun.com   <br />  也是一个较早的源码下载站点，现有库存一般，四个下载点，下载速度还不错，更新速度一般，人气较差，只提供下载无论坛，有一定的知名度，感觉还行，具有较强的竞争力。   <br />    <br />  9.下吧源码联盟：http://www.xia8.com   <br />  一个专门的下载站，现有的库存还可以，三个下载点，下载速度还不错，更新速度还可以，人气较差，感觉还可以，印象不是很深，具有较强的竞争力。   <br />    <br />  10.k666软件园：http://down.kk66.com   <br />  这个相信大家都知道的，建站很早，资源容量很大，更新也比较快，但现在很多人都被其站点的乱七八糟内容及广告给打走了，极端商业化已经使他逐渐的失去他自身的魅力。对于WEB技术来说，源码下载无分类，比较难找，就这点就不够专业。原来有人形容“瘦死的骆驼比马大”“垃圾代码一大堆”。还是希望其重整一下，能提供更多好的东东。因为其不是专门提供WEB类资源，排在最后，但的确其资源及整站的人气还是很不错的。如果重整一下，应具有很强的竞争力。   </p>
<img src ="http://www.cppblog.com/linhong34/aggbug/7274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-05-16 19:59 <a href="http://www.cppblog.com/linhong34/archive/2006/05/16/7274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>