常用算法归纳

每周一篇博客!
经过一周的学习,说来惭愧,终于摸到了C语言的门了。
在这一周里,随着上机实验的机会增多,我意识到算法的重要性。现如下归纳一些常用的算法。(新手经常会用到。)
1.
求水仙花数:
输入一个三位数,判断是否事一个水仙花数。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=111+555+333

#include<stdio.h>
#include<conio.h>
void main()
{
int i,n,x1,x2,x3,sum;
for(i=100;i<1000;i++)
{
n=i;
x1=n%10;
x2=n/10%10;
x3=n/100;
sum=x1x1x1+x2x2x2+x3x3x3;
if(sum==n)
printf("%d is a shuixianhua number!\n",i);

}

}
2…杨辉三角

#include <stdio.h>
#include <conio.h>
#define N 10
void yanghui(int a[][N],int n);
void main()
{
int i,j,n,b[N][N];
printf("【行数不能超过所定义的N的值】请输入行数:");
scanf("%d",&n);
yanghui(b,n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
printf("%-4d",b[i][j]);
printf("\n");
}
}
void yanghui(int a[][N],int n)
{
int i,j;
for(i=0;i<n;i++) /生成三角形边上元素/
{
a[i][0]=1; /即:0列与i行i列的元素为1/
a[i][i]=1;
}
for(i=2;i<n;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}

从键盘上输入5个数,输出最大、最小元素的值以及它们的下标

#define N 5
#include <stdio.h>
void main()
{
int i,j,k,max,min;
static int a[5];
for(i=0;i<5;i++)
{printf(“请输入第%d个数字:”,i+1);
scanf("%d",&a[i]);
}
max=min=a[0];
j=k=0;
for(i=0;i<5;i++)
{
if(max<a[i]) {max=a[i];j=i;}
else if(min>a[i]) {min=a[i];k=i;}
}
printf(“max:a[%d]=%d,min:a[%d]=%d”,j,max,k,min);
}

求两、三个数中较大者的函数

#include <stdio.h>
#include <conio.h>
int max(int,int,int);
void main()
{
int a,b,c,t;

printf(“依次输入三个数,请输入第一个数:”);
scanf("%d",&a);
printf(“请输入第二个数:”);
scanf("%d",&b);
printf(“请输入第三个数:”);
scanf("%d",&c);
t=max(a,b,c);
printf(“最大的数为 :%d”,t);
}
int max(int a,int b,int c)
{
int t;
if (a>b)
if (a>c)
t=a;
else
t=c;
else
if (b>c)
t=b;
else
t=c;
return t;
}

冒泡排序法
#include <stdio.h>

main()

{ int a[11],i,j,t;

printf("Input 10 numbers:

");

for(i=1;i<11;i++)

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

   printf(" ");

for( j = 1 ; j <= 9 ; j++ )

   for( i = 1 ; i <= 10 - j ; i++ )

      if( a[i] > a[i + 1] )

     {t = a[i]; a[i] = a[i + 1]; a[ i + 1] = t;}

printf("The sorted numbers:

");

for(i=1;i<11;i++)

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

}

字符数组:(逆序排列)如:< ABCDE - EDCBA >.
#include<string.h>
int main()
{
char c,str[80];
int i,j;
printf(“hu:”);
scanf("%s",str); /* 也可以gets(str);puts(str); */
for( i = 0 , j = strlen(str)-1 ; i < j ; i++ , j-- )
{
c = str[i];
str[i] = str[j];
str[j] = c;
}
printf(“Reversed string:%s”,str);
return 0;
}

求两个数的最小公倍数.

#include <stdio.h>
#include <conio.h>

int divisor(int a,int b)
{
int r;
while ((r=a%b)!=0)
{a=b;b=r;}
return b;
}
int multiple(int a,int b)
{
int d;
d=divisor(a,b);
return a*b/d;
}
void main()
{
int a,b,c;
printf(“输入第一个数a:”);
scanf("%d",&a);
printf(“输入第二个数b:”);
scanf("%d",&b);
c=multiple(a,b);
printf(“a和b的最小公倍数c为:%d”,c);
}

以上的几个常用算法,我依旧敲得不是很熟。这些算法的功能很常见于实用,需要勤加练习。
C语言一途,,,任重而道远。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值