整理Oj平台上一些基础问题的实现


宏定义

#define ABS(x) ((x) > 0 ? (x) : -(x))       //绝对值
#define MAX(x, y) (((x) > (y)) ? (x) : (y)) //两个数最大值
#define MIN(x, y) (((x) < (y)) ? (x) : (y)) //两个数最小值
#define toupper(ch) ((ch) - 'a' + 'A')      //小写转换为大写
#define tolower(ch) ((ch) - 'A' + 'a')      //大写转换为小写
#define SWAP(a,b) {a=a^b; b=a^b; a=a^b;}    //交换两个数值

整数相关

判断一个数是否为整数

//使用fmod对1取模是否为0
float x;
if(fmod(x,1) == 0)
//第二种
float b;
if(b - (int)b == 0)
    

判断数字位数

int length_int(int x)
{
    int count = 0;
    while (x != 0)
    {
        x /= 10;
        count++;
    }
    return count;
}

交换两个数(不使用临时变量)

int a,b; //a=11 b=99
a=a+b;
b=a-b;
a=a-b;   //a=99 b=11

取出数字各位上的数

int figure[1000];
//逆序输出          x 必须为 正数
int figure_int(int x, int figure[])
{
    for (int i = 0; x > 0; i++)
    {
        figure[i] = x % 10;
        x /= 10;
    }
}              // x =1892               [0]=2 [1]=9 [2]=8 [3]=1

数字倒序输出

int input,output = 0;
    while (input)
    {
        output = output * 10 + input % 10;
        input/=10;
    }
printf("%d",output);

排序算法

冒泡算法

#include <stdio.h>
void bubble_sort(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)   //外侧循环次数为 len-1
        for (int j = 0; j < len - 1 - i; j++)   //内循环次数为 len-1-i
        {
            int temp;
            if (arr[j] > arr[j + 1])   //从小到大             升序
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
}
int main()
{
    int arr[] = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70};
    int len = (int)sizeof(arr) / sizeof(*arr); //  数组长度
    //sizeof测字节长度.
    //short int 字节长  2 , int,long int,float 字节长为4  ,double ,long long int 字长 8
    bubble_sort(arr, len);
    return 0;
}

选择排序

#include <stdio.h>
void selection_sort(int arr[], int len)
{
    for (int i = 0; i < len - 1; i++)     //外侧循环次数为 len-1
        for (int j = i + 1; j < len; j++) //内循环 为 len
        {
            if (arr[i] > arr[j])         //从小到大             升序
            {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
}
int main()
{
    int arr[] = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70};
    int len = (int)sizeof(arr) / sizeof(*arr); //  数组长度
    //sizeof测字节长度.
    //short int 字节长  2 , int,long int,float 字节长为4  ,double ,long long int 字长 8
    selection_sort(arr, len);
    return 0;
}

打印三角形

金字塔 _1

#include <stdio.h>
int main(void)
{
    int rows;
    scanf("%d", &rows);
    for (int i = 1; i <= rows; i++)
    {
        for (int blank = 1; blank <= rows - i; blank++) //打印空格
        {
            printf("  "); //两个空格               第i行有2*(行数-i)个空格
        }
        for (int k = 0; k != 2 * i - 1; k++) //打印(星号+空格) 1-3-5-7-9...
        {
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}

倒三角形_1

#include <stdio.h>
int main(int argc, char *argv[])
{
    int rows;
    scanf("%d", &rows);
    for (int i = rows; i >= 1; i--)
    {
        //打印空格
        for (int j = 0; j < rows - i; j++)
        {
            printf("  ");
        }
        for (int j = 0; j < 2 * i - 1; j++)
        {
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}

数字三角形

#include <stdio.h>
int main(int argc, char *argv[])
{
    int rows;
    scanf("%d", &rows);
    for (int i = 1; i <= rows; i++)
    {
        //打印空格
        for (int j = 0; j < rows - i; j++)
        {
            printf("  ");
        }
        //左小一半
        for (int k = i; k < 2 * i - 1; k++)
        {
            printf("%d ", k);
        }
        //右大半
        for (int k = 2 * i - 1; k >= i; k--)
        {
            printf("%d ", k);
        }
        printf("\n");
    }
    return 0;
}

杨辉三角

弗洛伊德三角

#include <stdio.h>
int main()
{
    int N;
    scanf("%d", &N);
    int j = 1;
    for (int i = 1; i <= N; i++) //i控制打印行数
    {
        for (int l = 1; l <= i; l++, j++) //l 控制每行打印 l 个数字
            printf("%5d", j);   //j 为打印出来的数字,实为总共进行循环的次数
        printf("\n");
    }
    return 0;
}

数字进制转换

二进制—>十进制

十进制—>二进制

其他小问题

scanfgets

//形似
int n;char srt[10];
scanf("%d",&n);
//getchar();        //解决方法
gets(str);   //这里gets不会执行

不会的题解决掉

12-13 03:39
查看更多