首页 > 编程语言 >C语言经典算法100例

C语言经典算法100例

时间:2022-09-23 11:26:05浏览次数:61  
标签:int C语言 ++ 算法 num printf 100 include

【程序1】

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

# include <stdio.h>
# include <stdlib.h>
 
int main()
{
    int i,j,k,m;
    int s = 0;
    int S, N;
    int num[100][3] = {};
 
    for (i = 1; i < 5; i++) {
        for (j = 1; j < 5; j++) {
            for (k = 1; k < 5; k++) {
                num[s][0] = i;
                num[s][1] = j;
                num[s][2] = k;
                s = s + 1;
            }
        }
    }
    
    S = s;
    N = S;
    for (m = 0; m < S; m++) {
        if (num[m][0] == num[m][1] || num[m][0] == num[m][2] || num[m][1] == num[m][2]) {
            num[m][0] = 0;
            N = N - 1;
        }
    }
 
    printf("There are %d numbers and they are\n", N);
    for (m = 0; m < S; m++) {
        if (num[m][0] != 0) {
            printf("%d%d%d\n", num[m][0], num[m][1], num[m][2]);
        }
    }
    
 
    system("pause");
    return 0;
}

【程序2】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

# include <stdio.h>
# include <stdlib.h>
 
void main()
{
    double l, r;
 
    scanf_s("%lf", &l);
 
    l = l / 10000;
 
    if (l <= 0.0) {
        printf("Please input the right profit!");
    }
    else if(l > 0.0 & l <= 10.0){
        r = l * 0.1;
    }
    else if (l > 10.0 & l <= 20.0) {
        r = 10 * 0.1 + (l - 10) * 0.075;
    }
    else if (l > 20.0 & l <= 40.0) {
        r = 10 * 0.1 + 10 * 0.075 + (l - 20) * 0.05;
    }
    else if(l > 40.0 & l <= 60.0){
        r = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (l - 40) * 0.03;
    }
    else if (l > 60.0 & l <= 100.0) {
        r = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 40 * 0.03 + (l - 60) * 0.015;
    }
    else {
        r = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 40 * 0.03 + 40 * 0.015 + (l - 100) * 0.01;
    }
 
    printf("Your reward is %.2f", r * 10000);
 
    system("pause");
    return;
}

【程序3】

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

# include <stdio.h>
# include <stdlib.h>
 
void main() {
    int x, y;
    int n;
 
    for (x = 10; x < 1000; x++) {
        for (y = 13; y < 1000; y++) {
            n = 0;
            while (n < 1000) {
                if (n + 100 == x * x & n + 268 == y * y) {
                    printf("%d %d %d\n", x, y, n);
                    break;
                }
                else {
                    n = n + 1;
                }
            }
        }
    }
 
    system("pause");
    return;
}

 【程序4】

题目:输入某年某月某日,判断这一天是这一年的第几天?

# include <stdio.h>
# include <stdlib.h>
 
int main()
{
    int d, m, y;
    int month[12] = {};
    int n;
    int i;
 
    scanf_s("%d%d%d", &d, &m, &y);
 
    n = d;
    month[0] = month[2] = month[4] = month[6] = month[7] = month[9] = month[11] = 31;
    month[1] = 29;
    month[3] = month[5] = month[8] = month[10];
 
    if ((y % 4 == 0 && y % 100 != 0) ||  y % 400 == 0) {
        for (i = 0; i < m - 1; i++) {
            n = n + month[i];
        }
    }
    else {
        month[1] = 28;
        for (i = 0; i < m - 1; i++) {
            n = n + month[i];
        }
    }
 
    printf("This day is the %d day of the year.", n);
 
    system("pause");
    return 0;
}

【程序8】

题目:输出9*9口诀。

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int i, j;
 
    for (i = 1; i < 10; i++) {
        for (j = 1; j <= i; j++) {
            printf("%d x %d = %d  ", i, j, i * j);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}

【程序9】

题目:要求输出国际象棋棋盘。

#include <stdio.h>
#include <stdlib.h>
 
 
void main()
{
    int num[8][8] = {0};
    int i, j;
    
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if ((i + j) % 2 == 1) {
                num[i][j] = 1;
            }
        }
    }
 
 
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if (num[i][j] == 1) {
                printf("■");
            }
            else {
                printf("  ");
            }
        }
        printf("\n");
    }
    
    system("pause");
    return;
}
    int num[8][8] = {0};
    int i, j;
    
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if ((i + j) % 2 == 1) {
                num[i][j] = 1;
            }
        }
    }
 
 
    for (i = 0; i < 8; i++) {
        for (j = 0; j < 8; j++) {
            if (num[i][j] == 1) {
                printf("■");
            }
            else {
                printf("  ");
            }
        }
        printf("\n");
    }
    
    system("pause");
    return;
}

【程序11】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int n[20] = {0};
    int i;
 
    n[0] = n[1] = 1;
 
    for (i = 2; i < 20; i++) {
        n[i] = n[i - 1] + n[i - 2];
    }
 
    printf("The number of rabits in first 20 months is\n");
    for (i = 0; i < 20; i++) {
        printf("%d\n", n[i]);
    }
 
    system("pause");
    return 0;
}

【程序12】

题目:判断101-200之间有多少个素数,并输出所有素数。

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int num;
    int i;
    int N = 0;
 
    for (num = 101; num <= 200; num++) {
        for (i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                N = N + 1;
                break;
            }
        }
    }
 
    printf("There are %d numbers are prime", 100 - N);
 
    system("pause");
    return 0;
}

【程序13】

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

int main()
{
    int num = 100;
    int d1, d2, d3 = 0;
 
    printf("The 3-digits narcissistic numbers are\n");
    for (num = 100; num < 1000; num++) {
        d1 = num / 100;
        d2 = (num % 100) / 10;
        d3 = (num % 100) % 10;
        if (num == d1*d1*d1 + d2*d2*d2 + d3*d3*d3) {
            printf("%d\n", num);
        }
    }
 
 
    system("pause");
    return 0;
}

【程序14】

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

#include <stdio.h>
#include <stdlib.h>
 
int isPrime(int n) {
    int mark = 0;
    int i;
 
    for (i = 2; i < n / 2; i++) {
        if (n % i == 0) {
            mark = 1;
            break;
        }
        else {
            mark = 0;
        }
    }
 
    return mark;
}
 
int main()
{
    int num;
    int factor;
    int mark;
    int f[10];
    int i, j;
 
    scanf_s("%d", &num);
 
    j = 0;
    mark = 1;
 
    printf("%d = ", num);
 
    while (mark == 1) {
        mark = 0;
        for (factor = 2; factor < num / 2; factor++) {
            if (isPrime(factor) == 0){
                if (num % factor == 0) {
                    f[j] = factor;
                    mark = 1;
                    printf("%d * ", f[j]);
                    j++;
                    num = num / factor;
                    break;
                }
            }
        }
 
        if (mark == 0) {
            f[j] = num;
            printf("%d\n", f[j]);
    }
 
    }
    
    system("pause");
    return 0;
}

【程序15】

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

#include <stdio.h>
#include <stdlib.h>
int main()
{
 
    int point;
 
    scanf_s("%d", &point);
 
    (point >= 90) ? (printf("A")) : ((point >= 60) ? (printf("B")) : (printf("C")));
 
    system("pause");
    return 0;
}

【程序16】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

#include<stdio.h>
int main()
{
    int a,b,t,r;
    printf("Please input two numbers:\n");
    scanf("%d %d",&a,&b);
    if(a<b)
    {t=b;b=a;a=t;}
    r=a%b;
    int n=a*b;
    while(r!=0)
    {
        a=b;
        b=r;
        r=a%b;
    }
    printf("The greatest common factor is%d and the minimum common multiple is%d\n",b,n/b);
    
    return 0;
}

【程序17】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char s[100];
    int n_s, n_z, n_k, n_q;
    int len;
    int i = 0;
 
    n_s = n_z = n_k = n_q = 0;
 
    scanf_s("%s", &s, 100);
 
    len = strlen(s);
 
    for (i = 0; i < len; i++) {
        if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) {
            n_z = n_z + 1;
        }
        else if (s[i] >= '0' && s[i] <= '9') {
            n_s = n_s + 1;
        }
        else if (s[i] = ' ') {
            n_k = n_k + 1;
        }
        else {
            n_q = n_q + 1;
        }
    }
 
    printf("The numbers of character, number, blank and others are %d,%d,%d,%d", n_z, n_s, n_k, n_q);
 
    system("pause");
    return 0;
}

【程序18】

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main() 
{
    int a, s, n;
    int i;
 
    scanf_s("%d", &a);
    scanf_s("%d", &n);
 
    s = 0;
 
    for (i = 0; i < n; i++) {
        s = s + a * pow(10, i) * (n - i);
    }
 
    printf("s = %d", s);
 
    system("pause");
    return 0;
 
}

【程序19】

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int num;
    int r,i;
 
    for (num = 1; num <= 1000; num++) {
        r = 0;
        for (i = 1; i <= num/2; i++) {
            if (num % i == 0) {
                r = r + i;
            }
        }
        if (r == num) {
            printf("%d\n", num);
        }
    }
 
    system("pause");
    return 0;
}

【程序20】

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    float h, s;
    int i;
 
    h = 100 * pow(0.5, 10);
    s = 0;
 
    for (i = 0; i <= 10; i++) {
        s = s + 100 * pow(0.5, i);
    }
 
    printf("The 10th height is %f and the whole length is %f", h, s);
 
    system("pause");
    return 0;
}

 

标签:int,C语言,++,算法,num,printf,100,include
From: https://www.cnblogs.com/mapstar/p/16722020.html

相关文章

  • AttributeError: module 'win32com.gen_py.45541000-5750-5300-4B49-4E47534F4655x0x3
    背景 卸载一直使用的wps,并且重新安装后,电脑python3使用pywin32操作excel文件就报错:AttributeError:module‘win32com.gen_pyhasnoattribute‘CLSIDToClassMap‘报......
  • 2.c语言中数据类型
    2.1.1关键字C的关键字共有32个数据类型关键字(12个)char,short,int,long,float,doubleunsigned,signed,struct,union,enum,void控制语句关键字(12个)if,else,switch......
  • 凸包算法
    凸包的概念:在某个二维平面上的给定一个点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。凸包算法从点集中获取凸包的方法比较常用的有Jarvis步......
  • 「浙江理工大学ACM入队200题系列」问题 A: 零基础学C/C++34—— 3个数比较大小(冒泡排
    深夜写的,代码都还没来得及跑一便,可能有错误,欢迎指出,后续会检验一遍并修改错误.本题是浙江理工大学ACM入队200题第四套中的A题,同时给出了冒泡排序和选择排序算法......
  • 算法练习-第二天【数组】
    数组977.有序数组的平方参考:代码随想录977.有序数组的平方看完题目的第一想法根据题意直接每个元素求平方,然后排个序,提交。时间复杂度O(\(nlogn\))。funcsortedSqua......
  • 算法设计与分析课-实验三-动态规划
    算法设计与分析课实验三第一题矩阵连乘问题:分析:该问题求矩阵连乘积最少乘次数,对于两个矩阵A(i行j列)和B(j行n列),他们相乘的乘次数为ijn,对于两个矩阵只有它们的列和行......
  • CSP 2022 备战 贪心算法
    基本思路:1.建立数学模型来描述问题2.把求解的问题分成若干个子问题3.对每一子问题求解,得到子问题的局部最优解4.把子问题的局部最优解合并成一个解贪心的使用前提:局部......
  • KMP算法
    朴素的模式匹配算法朴素算法就是以主串的每一个字符作为子串的开头,与要匹配的字符串(称为模式串)进行匹配,匹配失败则主串退回到这次匹配首位的下一位,重新进行匹配。主......
  • C语言第15天,指针与多维数组
    ##数组名的转换规则当数组名arr出现在一个表达式当中,数组名arr将会被转换为指向数组首元素的指针。但是,这个规则有两个例外:1.对数组名arr使用sizeof时。2.对数组名......
  • python基础__十大经典排序算法
    用Python实现十大经典排序算法!排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序......