美文网首页
[C语言] <算法笔记>笔记及题目(一)

[C语言] <算法笔记>笔记及题目(一)

作者: 丶噗噗噗噗噗 | 来源:发表于2020-03-16 15:52 被阅读0次

    <算法笔记>第五章

    题目: Codeup


    5.1 简单数学

    作业比赛编号 : 100000588 - 《算法笔记》5.1小节——数学问题->简单数学

    问题 A: 守形数

    题目描述
    守形数是这样一种整数,它的平方的低位部分等于它本身。
    比如25的平方是625,低位部分是25,因此25是一个守形数。
    编一个程序,判断N是否为守形数。

    输入
    输入包括1个整数N,2<=N<100。

    输出
    可能有多组测试数据,对于每组数据,
    输出"Yes!”表示N是守形数。
    输出"No!”表示N不是守形数。

    #include <stdio.h>
    
    
    int to_array(int n, int num[]){
        int i;
        for(i=0; n>=1; i++){
            num[i] = n%10;
            n /= 10;
        }
        return i;
    }
    
    
    int main(void) {
        int n, nn, i, num_nn[10], num_n[3];
        while(scanf("%d", &n) != EOF){
            int len = to_array(n, num_n);
            nn = n*n;
            to_array(nn, num_nn);
            for(i=0; i<len;i++) {
                if (num_n[i] != num_nn[i]) {
                    printf("No!\n");
                    break;
                }
            }
            if(i == len) printf("Yes!\n");
        }
        return 0;
    }
    
    

    问题 B: 反序数

    题目描述
    设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
    求N的值

    输入
    程序无任何输入数据。

    输出
    可能有多组测试数据,对于每组数据,
    输出"Yes!”表示N是守形数。
    输出"No!”表示N不是守形数。

    #include <stdio.h>
    
    
    int to_array(int n, int num[]){
        int i;
        for(i=0; n>=1; i++){
            num[i] = n%10;
            n /= 10;
        }
        return i;
    }
    
    
    int main(void) {
        int n, nn, i, num_nn[10], num_n[3];
        while(scanf("%d", &n) != EOF){
            int len = to_array(n, num_n);
            nn = n*n;
            to_array(nn, num_nn);
            for(i=0; i<len;i++) {
                if (num_n[i] != num_nn[i]) {
                    printf("No!\n");
                    break;
                }
            }
            if(i == len) printf("Yes!\n");
        }
        return 0;
    }
    
    

    问题 C: 百鸡问题

    题目描述
    用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解

    输入
    测试数据有多组,输入n

    输出
    对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出

    #include <stdio.h>
    
    
    int main(void) {
        int n;
        scanf("%d", &n);
        int x=0, y=0, z=0;
        for(x=0; 5*x<=n; x++){
            for(y=0; 3*y<=n; y++){
                for(z=0; z<101; z++){
                    if(x+y+z==100 && (15*x+9*y+z)<=(3*n)) printf("x=%d,y=%d,z=%d\n", x, y, z);
                }
            }
        }
        return 0;
    }
    

    问题 D: abc

    题目描述
    设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c的值

    输入
    题目没有任何输入

    输出
    请输出所有满足题目条件的a、b、c的值。
    a、b、c之间用空格隔开。
    每个输出占一行

    #include <stdio.h>
    
    
    int main(void) {
    
        int x=0, y=0, z=0;
        for(x=0; x<=9; x++){
            for(y=0; y<=9; y++){
                for(z=0; z<=9; z++){
                    if(100*x+110*y+12*z==532) printf("%d %d %d\n", x, y, z);
                }
            }
        }
        return 0;
    }
    

    5.2 最大公约数与最小公倍数

    作业比赛编号 : 100000589 - 《算法笔记》5.2小节——数学问题->最大公约数与最小公倍数

    1818: 最大公约数

    题目描述
    输入两个正整数,求其最大公约数

    输入
    测试数据有多组,每组输入两个正整数

    输出
    对于每组输入,请输出其最大公约数

    #include <stdio.h>
    
    
    int gcd(int a, int b){
        if(b==0) return a;
        else return gcd(b, a%b);
    }
    
    
    int main(void) {
        int m, n;
        while(scanf("%d %d", &m, &n)!=EOF){
            printf("%d\n", gcd(m, n));
        }
        return 0;
    }
    /*
    最小公倍数: m/gcd(m, n)*n
    */
    

    相关文章

      网友评论

          本文标题:[C语言] <算法笔记>笔记及题目(一)

          本文链接:https://www.haomeiwen.com/subject/sazgehtx.html