Bootstrap

C语言常用基本算法

1.阶乘

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i,sum=0,p=1,n;
    scanf("%d",&n);
    if(n<0)
    {
        printf("负数没有阶乘\n");
        exit(0);
    }
    for(i=1;i<=n;i++)
    {
        p=p*i;
        sum=sum+p;
    }
    printf("阶乘的和为%d\n",sum);
}

2.素数

#include<stdio.h>
int main()
{
    int n,flag=1,i;
    scanf("%d",&n);//输入一个数n,判断它是否是素数。 
    for(i=2;i<n/2;i++) 
    {
        if(n%i==0)// 根据素数的定义n依次除以小于它本身大于1的数 
            flag=0;//一旦有能被整除的数,表明 n不是素数,使得flag=0 。 
    }
    if(flag==0)//根据flag的值判断n是否是素数 
        printf("%d不是素数",n); 
    else
        printf("%d是素数",n); 
}

3.99乘法表

#include<stdio.h>
int main()
{
    int i,j;
    for(i=1;i<10;i++)
    {
        for(j=1;j<=i;j++)
        {
            printf("%d*%d=%d  ",i,j,i*j);
        }
        printf("\n");
    }
}
4.水仙花数(三位数)

#include<stdio.h>
int main()
{
    int i,m,n,k;
    for(i=100;i<1000;i++)
    {
        m=i/100;
        k=i%10;
        n=(i-100*m)/10;
        if(i==m*m*m+n*n*n+k*k*k)
            printf("%d\n",i);
    }
}

5.完美数(10000以内)

#include<stdio.h>
int main()
{
    int i,j,s;
    for(i=1;i<=10000;i++)
    {
        s=0;
        for(j=1;j<i;j++)
        {
            if(i%j==0)
            {
                s=s+j;
            }
        }
        if(s==i)
            printf("%d ",i);
    }
}
6.相亲数

#include <stdio.h>
#define N 10000
void main()
{
    int i,j,k;
    unsigned s[N];

    for(i=2;i<N;i++)
    {
        for(j=1,s[i]=0;j<i;j++)
        {
            if(i%j==0)
                s[i]+=j;
        }
    }
    for(i=2;i<N;i++)
    {
        j=s[i];
        if(j>N)
            continue;//
        if(i==s[j]&&j>i)
        {
            printf("%d: ",i);
            for(k=1;k<i;k++)
                if(i%k==0)
                    printf("%d ",k);
                    printf("\n");
                    printf("%d: ",j);
            for(k=1;k<j;k++)
                if(j%k==0)
                    printf("%d ",k);
                    printf("\n\n");
        }
    }
}
7.数字反位输出

#include<stdio.h>
int main()
{
    int t = 0;
    int n;
    scanf("%d",&n);
    while(n!=0)
    {
        t = t*10+n%10;
        n = n/10;
    }
    printf("%d\n",t);
}

8.回文数判断

#include<stdio.h>
int main()
{
    int n,m=0,k;
    do
    {
        scanf("%d",&n);
        if(n<=0)
            printf("数据输入错误,请重新输入\n");
    }while(n<=0);
    k=n;
    while(k!=0)
    {
        m=m*10+k%10;
        k=k/10;
    }
    if(n==m)
        printf("%d是回文数\n",n);
    else
        printf("%d不是回文数\n",n);
}
9.排序(选择排序,冒泡排序,插入排序)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(int a[],int n);
void sort1(int a[],int n);
void sort2(int a[],int n);
int  main()
{
    int b[]={5,6,9,2,3,4};
    int i,n=6;
    sort2(b,n);
    for(i=0;i<n;i++)
    {
        printf("%3d",b[i]);
    }
    return 0;
}

//选择排序
void sort(int a[],int n)
{
   int t,i,j,k;
   for(i=0;i<n-1;i++)
   {
       k=i;
       for(j=i+1;j<n;j++)
       {
           if(a[j]<a[k])
           {
               k=j;
           }
       }
       if(k!=i)
       {
           t=a[i];
           a[i]=a[k];
           a[k]=t;
       }
   }
}

//冒泡排序
void sort1(int a[],int n)
{
    int i,j,t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(a[j+1]<a[j])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
}

//插入排序
void sort2(int a[],int n)
{
    int i,j,x;
    for(i=1;i<n;i++)
    {
        j=i-1;
        x=a[i];
        while(j>=0&&a[j]>x)
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=x;
    }
}
 

;