分类: LINUX
2009-11-17 13:10:14
cCODE: |
#include #include int count(int n); /*count how many ways to climb up N steps stairs.*/ int main (int argc, char *argv[]) { int n,ct; printf("please input n:\n"); scanf("%d",&n); ct=count(n); printf("there are %d ways to climb up N steps stairs!\n",ct); system("PAUSE"); return 0; } int count(int n) { if(1==n) return 1; else if(2==n) return 2; else return count(n-1)+count(n-2); } |
cCODE: |
#include #include #include int judgeDigit(int m); /*This function return the digit of parameter m*/ void judgeEqual(int m,int n); /*parameter m is a integer,parameter n is the digit of m,this function is used to judge m whether is a Armstrong integer and output it*/ int main (int argc, char **argv) { int i,len; printf("All 2 digit to 5 digit Armstrong integers are following:\n"); for(i=10;i<=99999;i++) { len=judgeDigit(i); judgeEqual(i,len); } printf("\n"); system("PAUSE"); return 0; } int judgeDigit(int m) {/*This function return the digit of parameter m*/ int len=0; do { ++len; m=m/10; }while(m); return len; } void judgeEqual(int m,int n) {/*parameter m is a integer,parameter n is the digit of m,this function is used to judge m whether is a Armstrong integer and output it*/ int j,temp=m,sum=0; for(j=1;j<=n;j++) { sum+=(int)(pow(temp%10,n)); temp=temp/10; } if(m==sum)/*if m is equal to sum,that is to say m is a Armstrong integer*/ printf("%d\t",m); } |
cCODE: |
#include #include int judge(int n); int main (int argc, char **argv) { int l,m,n,p,q; for(l=123;l<=329;l++) { m=2*l,n=3*l; p=l*1000+m,q=p*1000+n; if(judge(q)==0) //判断l、m、n是否符合要求。如果不符合就跳出本次循环,进入下次循环 continue; printf("%d,%d,%d\n",l,m,n); } system("PAUSE"); return 0; } int judge(int n) {//用于判断整数n的各位数字是否相同,如果有想同的就返回0;否则返回1 int num[10],i,j,len=0,temp=n; do { ++len; temp=temp/10; }while(temp);//求出n的位数 for(i=1;i<=len;i++) {//将n的各位数字存入num[],并判断是否存在0及相同的数字,如果存在就返回0 if((num=n%10)==0) return 0; n=n/10; for(j=1;j if(num[j]==num) return 0; } return 1; } |
cCODE:来自一位网友,即用判断各位数字的积是否等于9!且各位数字的和是否等于45。) |
#include bool judge( int a, int b, int c ) { char tmp_buf[ 10 ]; sprintf( tmp_buf, "%d%d%d", a, b, c ); int nTimeResult = 1; int nSumResult = 0; for ( int i = 0; i < 9; i++ ) { nTimeResult *= ( tmp_buf[ i ] - '0' ); nSumResult += ( tmp_buf[ i ] - '0' ); } return ( ( nTimeResult == 362880 ) && ( nSumResult == 45 ) ); } int main() { for ( int i = 123; i <= 329; i++ ) { if ( judge( i, i * 2, i * 3 ) ) { printf( "%d, %d, %d \n", i, i * 2, i * 3 ); } } return 0; } |
cCODE: |
#include #include void backtrack(int n); /*函数功能:回朔求解第n天至第7天的解(即第n~7天分别安排和尚几)*/ struct st { int spare[8]; /*存储和尚的空闲时间,spare=0表示星期i没有空闲,spare=1表示星期i空闲,其中spare[0]不用*/ int flag; /*用于标记和尚周内是否已经工作过,flag=0表示没挑过水,flag=1表示已经挑过水*/ }monk[8]; int x[8],sum=0;/*sum用于统计共有多少种方案*/ int main (int argc, char **argv) { int i,j; for(i=1;i<=7;i++) {/*初始化和尚的空闲时间,初始化时和尚全部没挑过水即flag都为0*/ printf("请输入和尚%d的空闲时间:",i); for(j=1;j<=7;j++) { scanf("%d",&monk.spare[j]); } monk.flag=0; } backtrack(1); printf("共有%d种方案\n",sum); } void backtrack(int n) {/*函数功能:回朔求解第n天至第7天的解(即第n~7天分别安排和尚几)*/ int j; if(n>7) { sum++; printf("方案%d:\n",sum); for(j=1;j<=7;j++) { printf("星期%d和尚%d挑水\n",j,x[j]); } printf("\n"); } else { for(j=1;j<=7;j++) { x[n]=j; if(monk[j].flag==0&&monk[j].spare[n]==1) {//判断和尚j是否已经挑过水及和尚星期n是否有空 monk[j].flag=1; backtrack(n+1); monk[j].flag=0; } } } } |
cCODE: |
#include #include #include int main (int argc, char **argv) { int flag=0,i=1; double n=1,sum=1; while(n>=pow(10,-6)) { n=(double)1/(2*i+1); i+=1; if(1==flag) { sum+=n; flag=0; } else { sum-=n; flag=1; } } sum*=4; printf("%lf",sum); system("PAUSE"); return 0; } |
cCODE: |
#include #include int main (int argc, char **argv) { double a1=1,a=0; int i=1; while(i<=50) { printf("%.0lf ",a1); //'.0’ is just for do not output the decimal place i++; if(i%2==1) a=2*a1+1; else a=2*a1; a1=a; } system("PAUSE"); return 0; } |
cCODE: |
#include #include int max(int a[],int n); int main (int argc, char **argv) { int a[]={1,2,3,4,5,6,7,6}; printf("The max element is %d!\n",max(a,7)); /*caution:he length of a is 8,but the argument is 7*/ system("PAUSE"); return 0; } int max(int a[],int n) { if(0==n) return a[n]; else return (a[n]>max(a,n-1)?a[n]:max(a,n-1)); } |
cCODE: |
#include #include void splitN(int n,int m);//n是需要拆分的数,m是拆分的进度。 int x[1024]={0},total=0 ;//total用于计数拆分的方法数,x[]用于存储解 int main() { int n ; printf("please input the natural number n:"); scanf("%d",&n); splitN(n,1); printf("There are %d ways to split natural number %d.\n",total,n); system("PAUSE"); return 0 ; } void splitN(int n,int m) {//n是需要拆分的数,m是拆分的进度。 int rest,i,j; for(i=1;i<=n;i++) {//从1开始尝试拆分。 if(i>=x[m-1]) {//拆分的数大于或等于前一个从而保证不重复 x[m]=i ;//将这个数计入结果中。 rest=n-i ;//剩下的数是n-i,如果已经没有剩下的了,并且进度(总的拆分个数)大于1,说明已经得到一个结果。 if(rest==0&&m>1) { total++; printf("%d\t",total); for(j=1;j printf("%d+",x[j]); } printf("%d\n",x[m]); } else { splitN(rest,m+1);//否则将剩下的数进行进度为m+1拆分。 } x[m]=0;//取消本次结果,进行下一次拆分。环境恢复,即回溯 } } } |