算法 — 最基础のc语言算法

1、斐波拉契数列

#include <iostream>

using namespace std;

int main()
{
    int n1 = 1, n2 = 1, display;
    int count;
    cin>>count;
    cout<<n1<<endl<<n2<<endl;
    while(count--) {
       /* display = n1 + n2;
        n1 = n2;
        n2 = display;
        */
        n1 = (n2 = n2 + n1) - n1;
        cout<<n2<<endl;
    }
    return 0;

}


2、回文数判断

#include <iostream>

using namespace std;

int main()
{
    int num, rem, reserve = 0, tmp;
    cin>>num;
    tmp = num;
    while(tmp != 0) {
        reserve = reserve*10 + (rem = tmp%10);
        tmp = tmp/10;
    }
    if(num == reserve) {
        cout<<"yes"<<endl;
    } else {
        cout<<"no"<<endl;
    }

}


3、判读质数

#include <iostream>

using namespace std;

int main()
{
    /*
    2\3\5\7\11
    */
    int num;
    bool flag = false;
    cin>>num;
    if(num == 1) cout<<"1既不是质数也不是合数!"<<endl;
    for(int i = 2; i <= num/2; i++) {
        if(num%i == 0) {
            flag = true;
            break;
        }
    }
    if(!flag) cout<<"yes"<<endl;
    else cout<<"no"<<endl;
    return 0;
}

4、打印三角形

#include<stdio.h>
/*
 * 三角型
 */
int main(){
    int rows,i,j,space;
    printf("Enter number of rows: ");
    scanf("%d",&rows);
    //i = rows
    for(i=rows;i>=1;--i){
            //rows - i
        for(space=0;space<rows-i;++space)
            printf("  ");
            //i
        for(j=1;j<=2*i-1;++j)
            printf("* ");
        printf("\n");
    }
/*
    for(i=1;i<=rows;++i){
        for(space=1;space<=rows-i;++space){
            printf("  ");
        }
        for(int j = 0; j<2*i-1; j++) {
             printf("* ");
        }
        printf("\n");
    }
    */
    return 0;
}


5、简单计算器

# include <stdio.h>
int main(){
    char o;
    float num1,num2;
    printf("Enter operator either + or - or * or divide : ");
    scanf("%c",&o);
    printf("Enter two operands: ");
    scanf("%f%f",&num1,&num2);
    switch(o) {
        case '+':
        printf("%.1f + %.1f = %.1f",num1, num2, num1+num2);
        break;
        case '-':
        printf("%.1f - %.1f = %.1f",num1, num2, num1-num2);
        break;
        case '*':
        printf("%.1f * %.1f = %.1f",num1, num2, num1*num2);
        break;
        case '/':
        printf("%.1f / %.1f = %.1f",num1, num2, num1/num2);
        break;
        default:
        /* If operator is other than +, -, * or /, error message is shown */
        printf("Error! operator is not correct");
        break;
    }
    return 0;
}

6、判断一个数能不能表示成两哥质数的和

#include <stdio.h>
int prime(int n);
int main()
{
    int n, i, flag=0;
    printf("Enter a positive integer: ");
    scanf("%d",&n);
    for(i=2; i<=n/2; ++i)
    {
        if (prime(i)!=0)
        {
            if ( prime(n-i)!=0)
            {
                printf("%d = %d + %d\n", n, i, n-i);
                flag=1;
            }
        }
    }
    if (flag==0)
        printf("%d can't be expressed as sum of two prime numbers.",n);
    return 0;
    }
int prime(int n)      /* Function to check prime number */
{
    int i, flag=1;
    for(i=2; i<=n/2; ++i)
        if(n%i==0)
            flag=0;
    return flag;
}

7、递归的方式颠倒字符串

#include <stdio.h>
void Reverse();
int main()
{
    printf("Enter a sentence: ");
    Reverse();
    return 0;
}
void Reverse()
{
    char c;
    scanf("%c",&c);
    if( c != '\n')
    {
        Reverse();
        printf("%c",c);
    }
}

8、十进制 与 二进制的转换

#include <stdio.h>
#include <math.h>
int binary_decimal(int n);
int decimal_binary(int n);
int main()
    {
    int n;
    char c;
    printf("Instructions:\n");
    printf("1. Enter alphabet 'd' to convert binary to decimal.\n");
    printf("2. Enter alphabet 'b' to convert decimal to binary.\n");
    scanf("%c",&c);
    if (c =='d' || c == 'D')
    {
        printf("Enter a binary number: ");
        scanf("%d", &n);
        printf("%d in binary = %d in decimal", n, binary_decimal(n));
    }
    if (c =='b' || c == 'B')
    {
        printf("Enter a decimal number: ");
        scanf("%d", &n);
        printf("%d in decimal = %d in binary", n, decimal_binary(n));
    }
    return 0;
}

int decimal_binary(int n)  /* Function to convert decimal to binary.*/
{
    int rem, i=1, binary=0;
    while (n!=0)
    {
        rem=n%2;
        n/=2;
        //进位
        binary+=rem*i;
        i*=10;
    }
    return binary;
}
int binary_decimal(int n) /* Function to convert binary to decimal.*/
{
    int decimal=0, i=0, rem;
    while (n!=0)
    {
        rem = n%10;
        n/=10;
        decimal += rem*pow(2,i);
        ++i;
    }
    return decimal;
}


9、数组转置

#include <stdio.h>
int main()
{
    int a[10][10], trans[10][10], r, c, i, j;
    printf("Enter rows and column of matrix: ");
    scanf("%d %d", &r, &c);
    /* Storing element of matrix entered by user in array a[][]. */
    printf("\nEnter elements of matrix:\n");
    for(i=0; i<r; ++i)
        for(j=0; j<c; ++j)
        {
            printf("Enter elements a%d%d: ",i+1,j+1);
            scanf("%d",&a[i][j]);
        }
    /* Displaying the matrix a[][] */
    printf("\nEntered Matrix: \n");
    for(i=0; i<r; ++i)
        for(j=0; j<c; ++j)
        {
            printf("%d  ",a[i][j]);
            if(j==c-1)
                printf("\n\n");
        }
    /* Finding transpose of matrix a[][] and storing it in array trans[][]. */
    for(i=0; i<r; ++i)
        for(j=0; j<c; ++j)
        {
            trans[j][i]=a[i][j];
        }
    /* Displaying the transpose,i.e, Displaying array trans[][]. */
    printf("\nTranspose of Matrix:\n");
    for(i=0; i<c; ++i)
        for(j=0; j<r; ++j)
        {
            printf("%d  ",trans[i][j]);
            if(j==r-1)
                printf("\n\n");
        }
    return 0;
}




你可能感兴趣的:(算法,C语言)