常见算法案例C语言

 杨辉三角/闰年/递归打印/1+2+...+n/乘法口诀表/水仙花数/阶乘n!/裴波那契数列/a+aa+aaa+aaaa+aaaaa /回文判断 /判断是几位数的整数 /反向输出5位数 /最大公约数 最小公倍数 /统计字符个数 /打印菱形图形

 1000以内完数/猴子吃桃

 

C语言源程序文件名的后缀是.c  C程序的基本组成单位是函数  C程序中用关键字double定义双精度实型变量

//猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
//第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到
//第10天早上想再吃时,就只剩一个桃子了。求第一天共摘多少桃子。
int m6(int x){
if(x==1)return 1;
else return (m6(x-1)+1)*2;
}

//6的因子为1、2、3,而6=1+2+3,因此6是“完数”,找出1000以内的完数
void m5(){
int i,j;
for(i=1; i<1000; i++){
int sum=0;
for(j=1; j<i; j++){
if(i%j==0)sum+=j;
}
if(sum==i)printf("%d是完数\n",i);
}
}

//打印菱形图形
void m3(int n){
int i,j;
for(i=0; i<=n/2; i++){
for(j=0;j<(n/2-i);j++)printf(" ");
for(j=0; j<2*i+1;j++){
printf("*");
}
printf("\n");
}
for(i=n/2 -1;i>=0;i--){
for(j=0;j<(n/2-i);j++)printf(" ");
for(j=0; j<2*i+1; j++)printf("*");
printf("\n");
}
}

//统计字母、数字、空格、其他字符个数
void m2(char *p){
int ch=0,num=0,space=0,other=0;
while(*p){
//printf("%c ",*p);
if('a'<=(*p)&&(*p)<='z'||'A'<=(*p)&&(*p)<='Z')ch++;
else if('0'<=(*p)&&(*p)<='9')num++;
else if(*p==' ')space++;
else other++;
p++;
}
printf("ch=%d num=%d space=%d other=%d",ch,num,space,other);
}

//求两个数m,n的最小公倍数和最大公约数
void m(int m, int n){
int i,x,y;
if(m<n){
m = m + n;//交换值 使m为两个数值的大值
n = m - n;
m = m - n;
}
y = m;
if(m%n==0){
printf("最小公倍数:%d 最大公约数:%d",m,n);
}else{
for(i=1; i<=n; i++){
if(m%i==0&&n%i==0)x=i;
}
while(y%m!=0||y%n!=0)y++;
}
printf("最小公倍数:%d 最大公约数:%d",y,x);
}

//输入一个五位数,再反向输出
void m1(int n){
int a,i,s=0;
while(n/10>0){
a = n;
n = n/10;
i = a - n*10;
s = s*10 + i;
}
printf("%d",s*10+n);
}

//判断是几位数的整数
void m10(int n){
int i=1;
while(n>10){
n = n/10;
i++;
}
printf("位数是:%d",i);
}

//回文判断
void m9(){
char str[80],*p=str,*q;
gets(str);
q = p+strlen(str)-1;
while(p<q){
if(*p++==*q--);
else break;
}
if(p<q)printf("%s 不是回文",str);
else printf("%s 是回文",str);
}

//闰年的条件是:

①能被4整除,但不能被100整除的年份都是闰年,如1996年,2004年是闰年;

②能被100整除,又能被400整除的年份是闰年。如1600年、2000年是闰年。不符合这两个条件的年份不是闰年。

//判断闰年
int m2(int year){
if(year%4==0&&year%100!=0 || year%400==0)printf("%d是闰年",year);
else printf("%d不是闰年",year);
}

-----------------------------

//递归打印 
void printN2(int n){
  if(n){
    printN2(n-1);
    printf("%d\t",n);
    if(n%10==0)printf("\n");
  }
}

---------------------

//sum=1-1/2+1/3-1/4+...+1/99-1/100
void method3(){
int sign=1;
float deno=2.0,sum=1.0, term;
while (deno<=100){
sign=-sign;
term=sign/deno;
sum=sum+term;
deno=deno+1;
}
printf("%f",sum);
}

//乘法口诀表
void m5(int n){
int i;
for(i=1;i<=n; i++){
int j;
for (j=1; j<=i; j++){
printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
}

-----------------------

//1!+2!+3!+...+n!
void fact(int n){
int sum=0,i,c=1;
for(i=1; i<=n; i++){
c = i*c;
sum = sum + c;
}
printf("%d",sum);
}

//水仙花数153=1^3+5^3+3^3
void m7(int n){
int c,i,j,k;
for(c=100; c<=n; c++){
k = c%10;
i = c/100;
j = c/10%10;
if(i*i*i+j*j*j+k*k*k==c)printf("水仙花数c=%d",c);
}
}

//a+aa+aaa+aaaa+aaaaa
void m4(int n){
int sum=0;
int a,i,temp;
scanf("%d",&a);
temp = a;
for(i=0; i<n; i++){
sum = sum + temp;
temp = 10*temp + a;
}
printf("sum = %d",sum);
}

//a+aa+aaa+aaaa+aaaaa
void m4(int a,int n){

int sum = 0,i,temp;

temp = a;
for(i=0; i<n; i++){
sum = sum + temp;
temp = 10*temp + a;
}
printf("sum = %d",sum);
}

 //斐波那契数列1,1,2,3,5,8,13,21,34,65前n项和 

void m6(int n){
int f1=1,f2=1,f;
int i;
printf("1\t1\t");
for(i=3; i<=n; i++){
f = f1 + f2;
f1 = f2;
f2 = f;
printf("%d\t",f);
}
}

 

//杨辉三角
void m(int i, int j){
int a[i][j],m,n;
a[0][0]=1,a[1][0]=1,a[1][1]=1;
for(m=2; m<i; m++){
for(n=0; n<=m; n++){
if(n==0||n==m)a[m][n]=1;
else a[m][n]=a[m-1][n-1]+a[m-1][n];
}
}
for(m=0; m<i; m++){
for(n=0; n<=m; n++){
printf("%d ",a[m][n]);
if(m==n)printf("\n");
}
}
}

posted @ 2020-11-12 16:34  geryhz  阅读(108)  评论(0)    收藏  举报